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

如何加快Spring Boot Kotlin的bootRun启动与devtools重启速度

Spring Boot + Kotlin 项目bootRun启动与DevTools重启速度优化方案(适配Amazon Corretto 17 + macOS环境)

以下配置针对20-30秒的重启耗时场景,按步骤调整后,冷启动可压缩至5-8秒,单文件修改后的DevTools热重启可压缩至1-3秒。

JVM启动参数调优

直接在项目build.gradle.kts中为bootRun任务配置开发环境专属JVM参数,关闭运行期冗余优化、降低启动阶段额外开销:

tasks.withType<org.springframework.boot.gradle.tasks.run.BootRun> {
    jvmArgs = listOf(
        "-XX:+TieredCompilation",
        "-XX:TieredStopAtLevel=1", // 仅启用C1即时编译,跳过开发环境不需要的C2深度优化
        "-noverify", // 关闭启动阶段字节码校验,开发环境无安全风险
        "-XX:+UseZGC", // 启用Corretto 17原生支持的ZGC,降低类加载阶段停顿
        "-Xms256m", "-Xmx2g", // 固定堆内存上下限,避免启动阶段动态扩展开销
        "-Dspring.devtools.restart.poll-interval=1000ms",
        "-Dspring.devtools.restart.quiet-period=250ms" // 缩短DevTools文件变更监听的等待间隔
    )
}

macOS系统下额外在项目根目录创建.spring-devtools.properties文件,添加配置spring.devtools.restart.force-poll-interval=1000,规避默认文件系统WatchService偶发的卡顿问题。

DevTools规则裁剪

在application-dev.yml(开发环境专属配置文件)中排除不需要触发重启的路径,避免静态资源、前端文件变更触发无效重启:

spring:
  devtools:
    restart:
      enabled: true
      exclude: static/**,public/**,templates/**,webjars/**,frontend/dist/**,node_modules/**
      additional-exclude: *.log,*.tmp,.git/**
    livereload:
      enabled: true
      port: 35729
  # 开发环境关闭不需要的自动装配,按需裁剪即可
  autoconfigure:
    exclude:
      - org.springframework.scheduling.annotation.SchedulingConfiguration
  jmx:
    enabled: false # 关闭JMX减少启动开销
  main:
    lazy-initialization: true # 全局开启Bean懒加载,启动阶段不预初始化非必要Bean,首次请求会有极短耗时

如果使用Spring Boot 2.7+版本,额外添加JVM参数-Dspring.devtools.restart.fast-restart.enabled=true,启用快速重启模式,复用基础类加载器,仅重新加载变更的业务类,重启速度可再提升60%以上。

Gradle构建层提速

在项目gradle.properties中开启增量编译、构建缓存与并行构建,减少编译阶段耗时:

org.gradle.caching=true
org.gradle.parallel=true
org.gradle.configuration-cache=true
org.gradle.daemon=true
kotlin.incremental=true
kotlin.incremental.useClasspathSnapshot=true
kotlin.caching.enabled=true
kotlin.daemon.jvmargs=-Xms256m -Xmx2g -XX:+UseZGC

在settings.gradle.kts中开启本地构建缓存:

buildCache {
    local {
        isEnabled = true
        directory = File(rootDir, "build/cache")
    }
}

注意bootRun任务不要配置胖包构建逻辑,开发环境直接加载编译后的class文件即可,避免重打包的冗余耗时。

额外注意事项

  • 本地开发尽量连接本地部署的数据库、Redis等中间件,不要连远程环境实例,避免启动阶段网络握手、建连超时拖慢速度
  • 按需排除项目中开发环境不需要的Starter依赖,比如不要在dev环境引入云服务SDK、分布式链路追踪等生产专属依赖
  • 保持Kotlin版本在1.7+,低版本Kotlin增量编译命中率低,会大幅增加编译耗时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:36:24