Spring Boot项目启动后立即停止无异常,求助排查原因
Spring Boot启动后直接停止、Tomcat未启动的原因及解决办法
你的基础Spring Boot项目打包运行后直接停止,Tomcat未启动,核心原因是项目缺少Web场景依赖。Spring Boot默认会根据引入的starter自动配置应用类型:如果没有web相关依赖,应用会被识别为普通Java程序,启动完成后就会退出JVM,不会启动Tomcat容器。
你的代码示例
DemoApplication.java
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
运行时输出
. ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.12) [2023-06-15 18:02:39.813] - 70503 INFO [main] --- com.example.demo.DemoApplication: Starting DemoApplication using Java 1.8.0_352 on machine16 with PID 503 (~/sv/lib/d-test.jar started by user6 in ~/sv) [2023-06-15 18:02:39.838] - 70503 INFO [main] --- com.example.demo.DemoApplication: No active profile set, falling back to 1 default profile: "default" [2023-06-15 18:02:40.883] - 70503 INFO [main] --- com.example.demo.DemoApplication: Started DemoApplication in 1.828 seconds (JVM running for 2.387)
构建时输出
. ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.12) 2023-06-15 18:07:10.050 INFO 123133 --- [ main] com.example.demo.DemoApplicationTests : Starting DemoApplicationTests using Java 1.8.0_352 on machine16 with PID 8372 (started by user6 in ~/sv/demo) 2023-06-15 18:07:10.051 INFO 123133 --- [ main] com.example.demo.DemoApplicationTests : No active profile set, falling back to 1 default profile: "default" 2023-06-15 18:07:11.185 INFO 123133 --- [ main] com.example.demo.DemoApplicationTests : Started DemoApplicationTests in 1.347 seconds (JVM running for 2.184)
解决办法
在项目的依赖管理文件中添加spring-boot-starter-web依赖:
Maven(pom.xml)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Gradle(build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-web'
添加依赖后重新打包运行,你会看到Tomcat启动的日志(比如Tomcat initialized with port(s): 8080 (http)),应用会保持运行状态,不会直接退出。
另外,构建时的输出和运行时类似,是因为构建过程中默认执行了测试用例(日志里的DemoApplicationTests),测试完成后JVM就会退出,和无web依赖的应用启动行为一致。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

