Started TttttApplication in 0.257 seconds (没有 Web 依赖导致 JVM 正常退出)

一、日志现象

  1. 控制台最后一句是
    Started TttttApplication in 0.24 seconds ...
    紧接着 JVM 正常退出:Process finished with exit code 0。
  2. 没有 ERROR/FATAL 日志,也没有 Spring Boot 的 banner 关闭、SpringApplicationShutdownHook 等典型异常信息。
    => 这说明Spring Boot 容器本身启动成功 ,但随后主线程无事可做,立即退出 ,因此 JVM 也跟着结束。
    对 Spring Boot 应用来说,这通常意味着没有任何非守护线程在运行 ------最常见的原因就是没有内嵌 Web 容器

二、根因定位

Spring Boot 3.x 只有在类路径下能找到 spring-boot-starter-web(或 spring-boot-starter-webflux) 时,才会自动配置并启动 Tomcat/Jetty/Undertow。

而你的启动命令里只依赖了:

/Users/.../spring-boot-starter-3.5.4.jar

并没有看到 spring-boot-starter-web 相关 jar。

因此 Spring Boot 启动后认为"这是一个非 Web 应用",main 线程执行完 SpringApplication.run() 就直接返回,JVM 随之退出。

三、解决方案(任选其一)

  1. 你其实想做一个 Web 应用

    pom.xml(或 Gradle)里加依赖:

    xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    重新编译运行,控制台会多出:

    Tomcat started on port(s): 8080 ...

    应用就会一直运行,等待 HTTP 请求。

  2. 你确实只想做一个 命令行/批处理/定时任务 应用

    让主线程不退出即可,常见做法:

    • 使用 Spring Boot 的 CommandLineRunner/ApplicationRunner,在里面跑一个长任务或死循环;

    • 或者显式阻塞主线程:

      java 复制代码
      public static void main(String[] args) {
          ConfigurableApplicationContext ctx =
                  SpringApplication.run(TttttApplication.class, args);
          // 阻塞等待关闭信号
          ctx.getBean(ApplicationReadyEvent.class);
      }
    • 也可以引入 spring-boot-starter-batch / spring-boot-starter-integration 等框架,它们会自己维持线程池。

  3. 其他可能踩坑点(但本次日志未体现)

    • main 方法写错:把业务代码放在 main 方法里,导致 run() 返回后立即结束 ------ 把业务逻辑放到 @SpringBootApplication 之外的 Bean 里即可。
    • 端口冲突:如果出现 Web server failed to start. Port 8080 was already in use,换一个端口或在 application.properties 里配置 server.port=8081 即可。
    • 低版本 JDK 不兼容:Spring Boot 3.5 要求 Java 17+,你用的是 21,没问题。

四、结论

这次"启动失败"并不是异常,而是没有 Web 依赖导致 JVM 正常退出

尝试之后成功解决

相关推荐
2601_962055976 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
2601_961901708 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
Lost of 程序猿8 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
QQ_21696290969 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
郑州光合科技余经理10 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒10 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
2601_9621284111 小时前
SpringBoot篇(缓存层)
java·spring boot·缓存
大辉狼_音频架构11 小时前
进阶:从源码编译 SOF 固件与 topology
后端
大辉狼_音频架构11 小时前
上板:让 SOF 在 FRDM-i.MX8MP 上跑起来
后端