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 正常退出。

尝试之后成功解决

相关推荐
小羊没烦恼!3 小时前
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
前端·数据库·后端·python·web安全·oracle
RuoyiOffice4 小时前
Spring AI+Vue3 企业知识库设计:让每个答案有依据,让每份资料守住权限
java·spring boot·vue3·rag·企业知识库·spring ai·ruoyi office
IT_陈寒4 小时前
一文搞懂Vite的核心概念
前端·人工智能·后端
一个简单的TTS开发者4 小时前
中文TTS工具有哪些-8款主流方案横向对比
人工智能·后端·python·indextts
小张成长计划..4 小时前
【Linux】25:线程概念和控制
java·linux·jvm
高频因子挖掘机5 小时前
量化回测应该保存不复权数据吗?从数据口径到收益计算的工程实践
后端·github·api
高频因子挖掘机6 小时前
实时行情为什么不应该逐只股票请求?批量查询与标的池管理实践
后端·github·api
程序猿DD11 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i13 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要82614 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring