在 Spring Boot 开发中,针对 IntelliJ IDEA 和 VS Code 都能通用的热加载方案主要有以下三种,按效率和成本排序:
- 官方方案:Spring Boot DevTools (最常用/免费)
- 开源进阶:DCEVM + HotswapAgent (推荐/全免费)
- 商业顶配:JRebel (最高效/付费)
1、Spring Boot DevTools
第一步:添加依赖
在 子项目 或根项目的 pom.xml 中添加:
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>第二步:修改 IDEA 核心设置
IDEA 默认不会在运行时自动编译,你需要开启这两个开关:
开启自动构建:
设置 (Settings) -> 构建、执行、部署 -> 编译器 (Compiler) -> 勾选 “自动构建项目” (Build project automatically)。
允许运行时并行构建:
设置 (Settings) -> 高级设置 (Advanced Settings) -> 找到 编译器 (Compiler) 分组 -> 勾选 “即使开发的应用程序当前正在运行,也允许自动构建开始”。
第三步:应用内优化(解决频繁重启)
因为你习惯不断修改代码,如果改一个字母就重启一次会很痛苦。建议在 application-dev.yml 中加入以下配置:
YAML
spring:
devtools:
restart:
enabled: true
# 1. 静默期:修改后等待 2 秒,如果没新动作再重启,防止连续保存导致反复重启
quiet-period: 2s
# 2. 排除非代码资源:修改这些文件只会触发 LiveReload(浏览器刷新),不重启服务
exclude: "static/**,public/**,templates/**,**/*.test,**/*.spec"- 开发习惯建议
手动触发(终极方案):如果你觉得它重启还是太勤快,可以取消勾选“自动构建项目”,改为在你想重启时按下 Ctrl + F9。这是最可控的方式。
内存状态:记住 DevTools 重启会清空内存里的登录 Session(如果是存内存的话),你可能需要重新登录。
2、DCEVM + HotswapAgent
DCEVM (Dynamic Code Evolution VM) 实际上是修改了 JVM 的源码,允许在运行时无限次地修改类结构(增删方法、字段等),而 HotswapAgent 则负责在类加载时同步更新 Spring、MyBatis、Hibernate 等框架的内部状态。
以下是针对 IDEA 和 VS Code 的通用配置指南:
- 环境准备:安装支持 DCEVM 的 JDK
传统的 Oracle JDK 或 OpenJDK 不支持这种高级热替换,你需要安装一个集成了 DCEVM 的 JDK。
推荐选择:SapMachine (由 SAP 维护,自带 DCEVM)。
下载对应的版本(如 SapMachine 17 或 21),选择 JDK 并在安装/解压后将其设为项目的 SDK。
备选方案:如果你使用的是 IntelliJ IDEA,它自带的 JetBrains Runtime (JBR) 实际上也包含了 DCEVM 的部分功能,但对于 VS Code 兼容性较差,建议还是安装独立的 SapMachine。
如果是IDEA,可以做编辑器直接选择下载:

- 获取 HotswapAgent
这是一个 Java Agent,负责处理框架层的“刷新”逻辑。
从 HotswapAgent GitHub Releases 下载最新的 hotswap-agent.jar。
将其放在一个固定的目录(例如 D:/tools/hotswap-agent.jar)。
- 在 IntelliJ IDEA 中配置
IDEA 对热加载的支持比较零散,需要几个地方配合:
设置 VM 参数:
在你的 Spring Boot 运行配置(Run/Debug Configuration)中,找到 VM Options,添加:
-javaagent:”D:\software\hotswap-agent-2.0.3.jar”=autoHotswap=true
–add-opens java.base/java.lang=ALL-UNNAMED
–add-opens java.base/java.lang.reflect=ALL-UNNAMED
–add-opens java.base/java.io=ALL-UNNAMED
–add-opens java.base/java.util=ALL-UNNAMED
–add-opens java.base/java.security=ALL-UNNAMED
–add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED
–add-opens java.desktop/sun.awt=ALL-UNNAMED
开启自动编译:
Settings -> Build, Execution, Deployment -> Compiler -> 勾选 Build project automatically。
允许运行时编译:
Settings -> Advanced Settings -> 勾选 Allow auto-make to start even if developed application is currently running。
Debugger 设置:
Settings -> Build, Execution, Deployment -> Debugger -> HotSwap。
将 On ‘Reload classes after compilation’ 设为 Always。
- 在 VS Code 中配置
VS Code 主要依赖 launch.json 来控制启动行为:
打开项目的 .vscode/launch.json。
在你的启动配置中添加 vmArgs:
JSON
{
“type”: “java”,
“name”: “Spring Boot App”,
“request”: “launch”,
“mainClass”: “com.example.DemoApplication”,
“vmArgs”: “-javaagent:/path/to/hotswap-agent.jar=autoHotswap=true”,
“projectName”: “demo”
}
开启自动编译:
VS Code 默认会在保存时由 Language Support for Java (Red Hat) 自动编译。如果没有生效,确保 java.autobuild.enabled 设置为 true。
- 核心:如何触发热替换?
不论在哪个 IDE,必须以 Debug 模式运行才能实现最稳定的热加载。
IDEA:点击绿色的小虫子图标。修改代码后,点击 Build Project (Ctrl+F9)。
VS Code:按 F5 启动。修改代码并保存(Ctrl+S)后,VS Code 会自动触发增量编译。
- 避坑指南(简明扼要版)
禁用 DevTools:既然用了 DCEVM,请务必从 pom.xml 中移除 spring-boot-devtools。否则 DevTools 的“重启”机制会干扰 DCEVM 的“替换”机制,导致混乱。
hotswap-agent.properties:如果你有特殊需求(比如只想热加载某些包),可以在 src/main/resources 下创建一个 hotswap-agent.properties 进行精细控制。
静态变量:DCEVM 虽然强大,但它无法撤销已经执行过的静态初始化块(static {}),这类修改可能仍需重启。
配置完成后,你会发现当你给类增加一个字段或者改一个 Spring Bean 的方法名时,控制台不再滚动重启日志,但新代码已经生效了。这就是真正的“热加载”。
最后编辑:admin 更新时间:2026-04-10 11:23