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

尝试之后成功解决

相关推荐
大不点wow26 分钟前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
止语Lab30 分钟前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活30 分钟前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困35 分钟前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn35 分钟前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
dkbnull38 分钟前
Spring Boot请求处理组件对比详解
java·spring boot
用户2986985301442 分钟前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
不能只会打代码43 分钟前
Day 011 — Spring 全家桶深度拆解
spring boot·mybatis·spring aop·spring mvc·spring ioc
用户772831049084044 分钟前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金1 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端