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

Spring Boot 3.3.0 JPMS模块启动后无报错自动退出求助

排查Spring Boot 3.3.0 + Java 21 JPMS应用启动后自动退出的问题

1. 确认应用是否为Web类型

Spring Boot 3.x中,若未引入spring-boot-starter-web或spring-boot-starter-webflux,应用会默认以命令行应用运行——启动完成后无常驻后台的非守护线程,因此会立即退出。

  • 检查pom.xml是否包含Web Starter依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  • 对比Spring Boot 2.1.x行为:旧版本可能存在隐式依赖,或你的旧项目实际包含Web依赖但未明确标注。

2. 检查module-info.java配置正确性

JPMS模块声明错误会导致Spring无法初始化必要组件,进而引发应用提前退出:

  • 确保已声明对Spring核心模块的依赖,并使用requires transitive传递必要依赖:
    module spring.jpms {
        requires transitive org.springframework.boot;
        requires transitive org.springframework.boot.autoconfigure;
        requires transitive org.springframework.web;
        
        // 允许Spring反射访问应用类(必要场景)
        opens ir.moke.module.spring to org.springframework.core, org.springframework.boot;
        
        // 导出启动类所在包(若需外部访问)
        exports ir.moke.module.spring;
    }
    
  • 注意:Spring Boot 3.x对JPMS模块名称有严格要求,比如org.springframework.boot是正确模块名,不可写错。

3. 验证Spring Boot Maven插件打包配置

Spring Boot 3.x的Maven插件对模块化应用打包有特殊处理,错误配置会导致运行时缺少必要模块或资源:

  • 确保spring-boot-maven-plugin版本与Spring Boot版本一致(3.3.0),并配置模块化参数:
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <mainClass>ir.moke.module.spring.Application</mainClass>
            <moduleName>spring.jpms</moduleName>
        </configuration>
    </plugin>
    
  • 尝试用插件run目标直接启动:mvn spring-boot:run,若能正常运行,说明打包环节存在问题。

4. 检查启动命令正确性

确保启动命令的模块路径和主类参数无误:

  • 确认target/lib目录包含所有必要模块JAR(含Spring Boot模块JAR),非模块化JAR会被视为自动模块。
  • 尝试用Spring Boot可执行JAR启动(若插件配置了repackage):java -jar target/your-app.jar,排除模块路径配置问题。

5. 分析线程状态

应用启动后立即退出,说明无常驻非守护线程,可通过工具排查:

  • 在启动命令中添加-Dspring.main.register-shutdown-hook=false,禁用Spring关闭钩子,观察是否延迟退出或暴露更多信息。
  • 启动后快速执行jps获取进程ID,再用jstack <pid>查看线程状态,确认是否仅有守护线程在运行。

6. 检查Spring Boot自动配置日志

开启自动配置调试日志,确认Web相关配置类是否加载:

  • 在application.properties中添加:
    logging.level.org.springframework.boot.autoconfigure=DEBUG
    
  • 启动后搜索WebMvcAutoConfiguration、TomcatServletWebServerFactory等关键词,验证Web服务器是否完成初始化。

内容的提问来源于stack exchange,提问作者mah454

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:23:27