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

使用mvn spring-boot:run启动Spring Boot应用远慢于java -jar的问题

解决思路
  • 补全JVM优化参数
    mvn spring-boot:run 默认使用的JVM参数比较保守,堆内存、GC配置未针对大数据量处理优化,180万条数据转POJO时容易触发频繁垃圾回收,直接拖慢速度。
    你可以在pom.xml里给spring-boot-maven-plugin添加JVM参数:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <jvmArguments>-Xmx4G -Xms2G -XX:+UseG1GC</jvmArguments>
        </configuration>
    </plugin>
    

    或者临时运行时指定参数:mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xmx4G -Xms2G"

  • 消除DevTools的性能影响
    如果项目引入了spring-boot-devtools依赖,mvn spring-boot:run会自动启用热重启功能,它使用的RestartClassLoader会禁用部分JIT编译优化,类加载逻辑也更复杂,大数据量处理时性能会明显下降。
    解决办法要么直接移除devtools依赖,要么运行时指定生产环境禁用它:mvn spring-boot:run -Dspring-boot.run.profiles=prod(前提是prod配置里已排除devtools)。

  • 调整插件的fork模式
    默认spring-boot:run会fork新进程运行应用,但fork配置异常可能导致类路径重复加载或JVM参数继承问题。
    可以临时关闭fork测试:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <fork>false</fork>
        </configuration>
    </plugin>
    

    注意:关闭fork后Maven自身的类加载可能影响应用,测试完成后再决定是否保留该配置。

  • 核对数据库配置一致性
    不同启动方式可能加载了不同配置文件,比如Maven启动用默认配置,而java -jar用生产配置,导致JDBC的fetchSize设置过小,数据库每次返回的数据量少,IO次数暴增。
    检查所有配置文件中的数据库参数,确保fetchSize设置合理(比如MySQL可设为1000以上),同时确认MyBatis/JPA这类ORM框架的批量处理配置在各环境下一致。

  • 清理重复依赖
    mvn spring-boot:run的类路径包含Maven所有依赖,可能存在重复的JDBC驱动、ORM框架包,导致类加载冲突或反射性能下降。
    用mvn dependency:tree命令排查重复依赖,将冗余依赖排除,保证类路径干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:50:46