You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用执行java -jar启动后立即退出,如何解决?

问题原因

你配置了providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat',这个依赖范围意味着该依赖仅在编译和运行时由环境提供,不会被打包到最终的Jar文件中。而Spring Boot Web应用需要嵌入式Tomcat容器来监听HTTP请求并保持进程运行,缺少Tomcat时,应用启动后没有持续运行的线程,主线程执行完毕就会立即退出。

解决方案

方案1:将Tomcat依赖改为implementation范围

直接修改build.gradle的依赖配置,把Tomcat的依赖范围从providedRuntime改成implementation,这样打包时Tomcat会被包含到Jar中,启动后容器会持续运行:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

修改后重新执行gradle assemble,再用java -jar运行生成的Jar包即可。

方案2:保留providedRuntime但配置Spring Boot插件生成可执行Jar

如果你的应用需要同时支持嵌入式Tomcat(本地运行)和外部容器部署(如Tomcat服务器),可以保留providedRuntime配置,同时确保Spring Boot插件的bootJar任务启用,该任务会自动将providedRuntime依赖包含到可执行Jar中:

  1. 确保已应用Spring Boot插件(通常build.gradle顶部已有配置):
plugins {
    id 'org.springframework.boot' version '<你的Spring Boot版本>'
    id 'io.spring.dependency-management' version '<对应版本>'
    id 'java'
}
  1. 显式启用bootJar任务(默认已启用,可添加确保生效):
bootJar {
    enabled = true
}

执行gradle bootJar(或gradle assemble,默认包含bootJar)生成可执行Jar,运行后Tomcat容器会正常启动并保持进程运行。

补充说明:providedRuntime适合在将应用打包为War包部署到外部Tomcat时使用,此时外部容器会提供Tomcat依赖;但如果是生成可执行Jar运行,必须确保Tomcat依赖被包含在Jar内,否则应用会启动后立即退出。

内容的提问来源于stack exchange,提问作者JGleason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:05:03