在 Spring Boot 开发中,针对 IntelliJ IDEA 和 VS Code 都能通用的热加载方案主要有以下三种,按效率和成本排序:

  1. 官方方案:Spring Boot DevTools (最常用/免费)
  2. 开源进阶:DCEVM + HotswapAgent (推荐/全免费)
  3. 商业顶配: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 的通用配置指南:

  1. 环境准备:安装支持 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,可以做编辑器直接选择下载:

  1. 获取 HotswapAgent
    这是一个 Java Agent,负责处理框架层的“刷新”逻辑。

从 HotswapAgent GitHub Releases 下载最新的 hotswap-agent.jar。

将其放在一个固定的目录(例如 D:/tools/hotswap-agent.jar)。

  1. 在 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。

  1. 在 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。

  1. 核心:如何触发热替换?
    不论在哪个 IDE,必须以 Debug 模式运行才能实现最稳定的热加载。

IDEA:点击绿色的小虫子图标。修改代码后,点击 Build Project (Ctrl+F9)。

VS Code:按 F5 启动。修改代码并保存(Ctrl+S)后,VS Code 会自动触发增量编译。

  1. 避坑指南(简明扼要版)
    禁用 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-09 20:19
最后编辑:admin  更新时间:2026-04-10 11:23