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

Spring Boot应用启动后自动关闭问题求助

Spring Boot应用启动后自动关闭排查方案

1. 确认核心依赖是否到位

Spring Boot Web应用必须包含spring-boot-starter-web依赖,打开你的pom.xml检查是否有这段配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

如果是非Web应用(比如纯后台任务),需要添加spring-boot-starter或spring-boot-starter-data-jpa这类能维持Spring上下文运行的依赖,否则Spring初始化完成后会直接关闭。

2. 检查主启动类的注解与包结构

主启动类必须标注@SpringBootApplication,且要确保它能扫描到控制器类——控制器需与主类在同一个包或子包下(比如主类在com.example.demo,控制器应在com.example.demo或com.example.demo.controller路径下)。若控制器在其他包,需给主类添加@ComponentScan(basePackages = "你的控制器包路径")注解。

主启动类示例:

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

3. 从运行日志中定位问题

重点查看以下日志内容:

  • 是否出现Started DemoApplication in X seconds的日志?如果有但随即出现关闭日志,说明上下文初始化完成,但没有阻塞主线程的组件(比如Web容器未启动)。
  • 是否存在报错信息?比如依赖冲突、端口被占用、数据库配置错误等,这类问题会导致Spring直接关闭上下文。
  • 是否出现Closing org.springframework.context.annotation.AnnotationConfigApplicationContext日志?出现则说明未启动Web容器或后台任务组件。

4. 排查application.properties配置

确保没有禁用Web容器的配置,比如不要设置:

spring.main.web-application-type=NONE

Web应用默认的web-application-type为SERVLET,无需手动配置,若误设为NONE需立即删除该配置。

5. 临时添加阻塞逻辑排查

若以上步骤均未解决问题,可在主启动类中添加临时阻塞代码,验证应用是否能保持运行:

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        // 临时阻塞主线程,仅用于测试
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如果这样能维持应用运行,说明问题在于缺少维持上下文运行的组件(比如未添加Web依赖)。

内容的提问来源于stack exchange,提问作者Jawad-Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:05:19