
Spring Boot 应用启动后立即退出,是因为错误地使用了传统 Spring 的 ClassPathXmlApplicationContext,而非 Spring Boot 推荐的 SpringApplication.run();后者会自动启动嵌入式 Web 容器(如 Tomcat),保持进程常驻并监听端口(默认 8080)。
spring boot 应用启动后立即退出,是因为错误地使用了传统 spring 的 `classpathxmlapplicationcontext`,而非 spring boot 推荐的 `springapplication.run()`;后者会自动启动嵌入式 web 容器(如 tomcat),保持进程常驻并监听端口(默认 8080)。
你当前的 main 方法:
@SpringBootApplication
public class WebSpringDemoApplication {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("spring-config.xml");
}
}本质上只是加载了一个纯 Spring(非 Boot)的 XML 上下文,完全绕过了 Spring Boot 的自动配置、嵌入式容器启动和生命周期管理机制。因此上下文初始化完成后(例如执行了 Cat.init()),JVM 无任何守护线程维持运行,进程自然退出,输出 Process finished with exit code 0 —— 这是预期行为,而非异常。
✅ 正确做法:使用 SpringApplication.run() 启动 Spring Boot 应用:
@SpringBootApplication
public class WebSpringDemoApplication {
public static void main(String[] args) {
SpringApplication.run(WebSpringDemoApplication.class, args);
}
}该调用将:
- 自动扫描
@SpringBootApplication注解(含@ComponentScan,@Configuration,@EnableAutoConfiguration); - 加载
application.properties/application.yml配置(包括server.port=8080); - 启动嵌入式 Tomcat(或 Jetty/Undertow),绑定到指定端口;
- 保持主线程不退出,持续响应 HTTP 请求。
⚠️ 注意事项:
- 删除
spring-config.xml及其依赖(如ClassPathXmlApplicationContext),Spring Boot 推崇 Java Config 或注解驱动,XML 配置在 Boot 项目中已属反模式; - 若需定义 Bean(如
Cat),应改用@Bean方法或@Component类:
@Component
public class Cat {
public void init() { System.out.println("Init"); }
public void destroy() { System.out.println("Destroy"); }
}- 如需在应用完全就绪后执行自定义逻辑(例如预热缓存、连接外部服务),推荐使用
ApplicationRunner或CommandLineRunner(比ApplicationListener<applicationreadyevent></applicationreadyevent>更简洁、类型安全):
@Component
public class StartupTask implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("✅ Application is fully ready. Starting custom logic...");
// 你的初始化代码
}
}总结:Spring Boot 不是 Spring 的简单封装,而是全新约定优于配置的启动范式。务必使用 SpringApplication.run() 入口,避免混用传统 Spring XML 上下文,才能真正享受自动配置、内嵌容器和生产就绪特性。


















