spring boot 结合 spring-boot-devtools 实现极速热重启,核心是类加载隔离、变更监听与快速上下文重启;必须配置三项:devtools 依赖(runtime scope + optional=true)、idea 开启自动编译、启用运行时自动构建。

Spring Boot 结合 spring-boot-devtools 实现本地代码修改后的极速自动热重启,核心在于“类加载隔离 + 变更监听 + 快速上下文重启”,不是全量 JVM 重启,而是只刷新你改的那部分代码。它快的关键,是跳过了第三方依赖重加载和 Spring 容器冷启动。
必须配置的三项基础项
缺一不可,否则热重启不生效:
-
添加 devtools 依赖(Maven):
确保<optional>true</optional>,避免打包进生产 jar;scope 设为runtime即可。 -
开启 IDEA 自动编译:
Settings → Build, Execution, Deployment → Compiler → 勾选 Build project automatically。 -
启用运行时自动构建:
Ctrl + Shift + A → 输入Registry→ 勾选compiler.automake.allow.when.app.running(这是让 IDEA 在应用运行中也能触发编译的关键)。
让重启更稳更快的常用配置
默认行为已可用,但以下调整能显著提升体验:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
用 trigger-file 控制重启时机:
在application.yml中设置:spring.devtools.restart.trigger-file: .restart,之后只需保存一个空的.restart文件(或任意编辑后保存),就触发重启,避免频繁保存 Java 文件导致误重启。 -
排除静态资源干扰:
加配置:spring.devtools.restart.exclude: static/**,public/**,templates/**,这些目录改动不会触发重启,配合 LiveReload 插件直接刷新页面即可。 -
加快轮询响应:
默认每秒扫描一次 classpath,可调快:spring.devtools.restart.poll-interval: 1000(单位毫秒),spring.devtools.restart.quiet-period: 400(防抖时间,避免连续保存多次触发多次重启)。
模板与前端资源实时生效技巧
热重启只解决 Java 类和配置文件,HTML/Thymeleaf/JS/CSS 需额外配合:
-
关闭模板缓存(以 Thymeleaf 为例):
spring.thymeleaf.cache: false,改完 HTML 保存后,刷新浏览器即见效果,无需重启。 -
启用 LiveReload:
devtools 内置 LiveReload Server(默认端口 35729),安装对应浏览器插件(如 Chrome 的 LiveReload),开启插件开关,静态资源保存后自动刷新页面。 -
禁用浏览器缓存(开发时建议):
F12 → Network 标签页 → 勾选 Disable cache (while DevTools is open),避免因缓存看不到最新样式或 JS。
常见失效原因与排查点
改了代码却不重启?先检查这几处:
- 项目是否以
java -jar方式运行?devtools 在 jar 包模式下默认禁用(可通过-Dspring.devtools.restart.enabled=true强制启用,但不推荐)。 - 是否调用了
SpringApplication.setRegisterShutdownHook(false)?这会切断 devtools 的重启钩子,必须保留 shutdown hook。 - IDE 是否真正完成了编译?检查
target/classes或out/production下对应 class 文件修改时间是否更新。 - 是否误配了
spring.devtools.restart.enabled=false或被 profile 覆盖?可在启动日志中搜索Restart enabled确认状态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










