Spring Boot应用无报错但未启动嵌入式Tomcat,接口访问失败求助
我之前刚接触Spring Boot的时候也踩过这个坑!明明选了Web组件,代码也写了,启动没报错就是访问不了,后来排查发现是这些常见问题,你可以一个个核对:
Web Starter依赖缺失或异常
先检查你的构建文件(Maven的pom.xml或者Gradle的build.gradle)里有没有spring-boot-starter-web依赖。这个依赖是Spring Boot启动Tomcat和Web功能的核心,要是没加上或者被意外注释了,Spring Boot就不会初始化Web容器。
Maven正确的依赖配置应该是:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>Gradle的话是:
implementation 'org.springframework.boot:spring-boot-starter-web'另外还要注意,如果用的是Spring Boot 3.x版本,你的JDK必须是17及以上,版本不兼容也可能导致Web容器静默启动失败(虽然一般会报错,但偶尔也有特殊情况)。
启动类包位置不正确
Spring Boot的启动类(就是带@SpringBootApplication注解的那个类)默认只会扫描自身所在包及其子包的组件。比如你的HelloController在com.example.demo.controller包下,那启动类必须放在com.example.demo或者更上层的包(比如com.example)里。如果启动类在com.test这种完全不相关的包,Spring扫描不到你的Controller,也不会触发Web容器的启动逻辑。配置文件禁用了Web环境
去看看你的application.properties或者application.yml里有没有类似这样的配置:spring.main.web-application-type=none或者YAML格式:
spring: main: web-application-type: none这个配置会强制Spring Boot以非Web应用模式启动,自然不会启动Tomcat。如果是不小心加上的,删掉或者改成
web-application-type=servlet就行。Tomcat依赖被意外排除
有时候可能会不小心在spring-boot-starter-web里排除了Tomcat的依赖,比如:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>要是有这个排除项,又没引入其他Web容器(比如Jetty、Undertow),那Spring Boot就没有可用的Web容器,自然不会启动Tomcat。
运行方式错误
确认你是通过启动类的main方法来运行应用的,或者用正确的构建命令:- Maven:
mvn spring-boot:run - Gradle:
./gradlew bootRun
要是你直接运行了Controller类,或者用普通的mvn run命令,那只会执行单个类的逻辑,不会启动整个Spring Boot应用,Tomcat自然也不会启动。
- Maven:
内容的提问来源于stack exchange,提问作者avseq




