spring boot devtools 实质是快速重启而非真正热替换,其通过双类加载器机制(base/restart)仅重载业务代码,配合idea自动编译(build project automatically + compiler.automake.allow.when.app.running)及spring-boot-maven-plugin的fork=true配置实现秒级生效。

Spring Boot DevTools 不是真正的“热替换”,而是通过快速重启上下文来模拟热部署效果,它在开发阶段能大幅缩短代码修改到生效的等待时间。关键在于配置正确、理解机制、避开常见陷阱。
基础依赖与 Maven 配置
必须在 pom.xml 中添加 devtools 依赖,并确保它只在开发环境生效:
- 使用 runtime 作用域,避免打包进生产 jar
- 设置 optional=true,防止被子模块意外继承
- 配套启用 spring-boot-maven-plugin 的 fork=true,这是 DevTools 重启机制生效的前提
IDEA 必须开启的两项编译行为
仅加依赖远远不够,IDEA 默认不会在应用运行时自动编译。需手动打开两个开关:
- Settings → Build → Compiler → 勾选 Build project automatically
- 按 Ctrl+Shift+Alt+/ 打开 Registry,启用 compiler.automake.allow.when.app.running
这两项缺一不可,否则改完代码保存,target/classes 不会更新,DevTools 就无从监听变更。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
配置文件中的关键参数
在 application-dev.properties 或 application-local.yml 中建议显式配置:
- spring.devtools.restart.enabled=true(默认已开启,显式写明更清晰)
- spring.devtools.restart.exclude=static/**,templates/**,public/**:静态资源和模板文件改动不触发重启,但可配合 livereload 实时刷新页面
- spring.devtools.livereload.enabled=true:启用浏览器自动刷新(需安装 LiveReload 浏览器插件)
- spring.devtools.restart.poll-interval=1000 和 quiet-period=400:调优监听灵敏度,避免频繁抖动重启
它到底怎么工作的?别被“热部署”误导
DevTools 实际上做了三件事:
- 把类分成两类:第三方 jar 由 Base ClassLoader 加载(不变),你写的代码由 Restart ClassLoader 加载(可丢弃重做)
- 用 FileSystemWatcher 持续扫描 target/classes 目录下 .class 文件变化
- 一旦检测到变更,就丢弃旧的 Restart ClassLoader,新建一个并重新加载所有业务类——不是 JVM 层热替换,而是轻量级上下文重启
所以它支持新增 Controller、改 @Bean 方法、加字段等结构变更,但不等于零延迟;实测 SSD 上通常 1–2 秒完成,远快于完整启动。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










