热重载 beta
传统编写代码时,需要重启应用才能生效,而热重载可以在不重启应用下让编写的代码生效立刻,让开发者编写的代码改动瞬间生效,极大提升迭代效率。支持类(包括代理类)的属性和方法变动、Spring、Solon、Mybatis等主流框架。同时适配 jdk8、jdk11、jdk17、jdk21、jdk25 等多个JDK版本。
1. 开启热重载
- 请关掉idea的
Build, Execution, Deployment -> Debugger -> Async Stack Traces配置

- 点击
More Actions中的Hotswap 'xxx' with DebugTools以热重载的方式启动应用。

如果觉得每次都要展开 More Actions 比较繁琐,可以将按钮配置在 Main Toolbar 中
比如在右侧添加按钮如下图所示:

搜索 Hotswap with DebugTools,如果想调 Icon 也可以在下面修改。

这样就可以在外面点击了

TIP
- 热重载需要特定的jdk才能生效,请先参考JDK安装完成JDK的初始化。
- 不更换jdk也可以使用热重载,只是无法更改类的签名(推荐更换jdk)。
启动项目如果提示
DCEVM is not installed,检查JDK安装是否正确。JDK8 检查命令java -XXaltjvm=dcevm -version是否能正常输出。
2. 触发热重载
热重载是通过 debug 方式启动应用,项目输出如下日志,并打印载入的热重载插件。
DebugTools: 2025-01-07 16:41:07.909 INFO [main] i.g.f.d.t.h.c.HotswapAgent 44 : open hot reload unlimited runtime class redefinition.{3.3.0}
DebugTools: 2025-01-07 16:41:08.498 INFO [main] i.g.f.d.t.h.c.c.PluginRegistry 132 : Discovered plugins: [JdkPlugin, ClassInitPlugin, AnonymousClassPatch, WatchResources, HotSwapper, Proxy, Spring, MyBatis]2.1 Debug热更新
- 通过右键菜单的
Compile and Reload Modified Files按钮.

- 文件主页面的
Code changed按钮.

2.2 热部署
热部署能发远程应用,当然也可以用于将本地变更部署到已经附着的目标应用。
详细配置和操作请查看热部署。
2.3 单文件远程编译
在 Java 源文件的编辑器或项目树中打开右键菜单,点击 远程编译并热部署 "xxx.java",插件会先保存当前文件,再把源码发送到已附着的目标应用,由目标应用完成远程编译并立即热部署。
如果当前项目同时连接了多个应用,点击后会先选择要部署到的连接;执行时会使用该连接卡片中当前选中的 ClassLoader。

热部署完成后,结果会输出到 IDEA 的 Run 工具窗口,页签标题为 远程部署结果;多应用连接时标题会带上应用名称。

TIP
- 只有附着应用后才支持通过热部署的方式热重载变动文件
- 使用远程动态编译时,附着应用必须要通过 JDK 启动,不能使用 JRE 启动。
TIP
热部署时idea可能有时无法获取到最新的断点信息,如果需要及时更新断点请使用方式1
2.4 单 XML 文件
在 XML 文件的编辑器或项目树中打开右键菜单,点击 编译 "xxx.xml" 到target目录,插件会先保存当前 XML 文件,再按源码根下的相对路径写入当前模块的编译输出目录。

TIP
- 这个操作只覆盖编译输出目录中的资源文件,不会修改源码目录下的 XML。
- XML 文件需要位于项目源码根或资源根下,否则插件无法计算写入
target/classes的相对路径。 - 也可以通过方式1重新编译项目来触发 XML 文件更新。
3. 哪些情况可以热重载
3.1 普通的class文件
- 新增类文件
- 存在的类 增加/修改 类中的 属性/方法/内部类。
- 匿名内部类
- 枚举类
详细点击 class文件热重载 查看
静态信息变动特别注意
静态字段热重载会编译时初始化的值覆盖掉运行时的值,具体点击查看
3.2 代理类
- java JDK 代理类。
- Cglib 代理类。
详细点击 代理类热重载 查看
3.3 SpringBoot Bean
- Controller
- Service
- Component
- Repository
详细点击 SpringBoot 查看
3.4 MyBatis
- Mapper(新增/修改)
- Xml(新增/修改)
注意
MyBatis 目前支持在 Spring 环境下,其他情况未知。
详细点击 MyBatis 查看
3.5 MyBatisPlus
- Entity(新增/修改)
- Mapper(新增/修改)
- Xml(新增/修改)
注意
MyBatisPlus 目前支持在 Spring 环境下,其他情况未知。
详细点击 MyBatisPlus 查看
3.6 dynamic-datasource
@DS注解新增@DS注解修改
详细点击 DynamicDatasource 查看
3.7 HuTool
支持 hutool 热重载
ReflectUtil反射工具类BeanDescbean描述符JSONUtiljson工具类
3.8 Gson
支持 Gson 工具包热重载
3.9 EasyExcel
支持 EasyExcel 热重载
3.10 Jackson
支持 Jackson 热重载
3.11 FastJson、FastJson2
3.12 hibernate-validator
支持 hibernate-validator 工具包热重载
3.13 Solon
支持 Solon 类及容器热重载
ControllerComponentConfiguration- ...
详细点击 Solon 查看
3.14 OpenFeign
支持 OpenFeign 热重载
- 支持
@FeignClient注解标记的接口新增/修改
3.15 其他
其他情况热重载尝试一下,这里不一一举例了,如果不能生效麻烦提交个 issues 反馈一下。
4. 禁用热重载插件
如果某个热重载插件在当前项目中存在兼容问题,可以先在 Settings | DebugTools | 热重载 中临时禁用指定插件,再重新以热重载方式启动应用。

禁用插件 会把选中的插件名称写入热重载启动参数 disabledPlugins。Agent 初始化时会根据插件名跳过对应插件,适合用于临时规避某个框架插件引起的启动异常、类转换异常或热重载副作用。
可选插件按类型分组:
| 分组 | 插件 |
|---|---|
| Base | JdkPlugin、Class、Proxy、HotSwapper、WatchResources |
| Third Party | Spring、Feign、MyBatis、Solon |
| Other | IntelliJIdea、HibernateValidator、EasyExcel、Gson、FastJson、HuTool |
WARNING
- 这个配置只影响后续重新启动的热重载应用;已经启动的应用不会因为修改设置立即卸载插件。
- 禁用插件会关闭对应能力。例如禁用
Spring后,Spring Bean 新增/修改相关的热重载能力也会失效。 - 如果只是排查问题,建议一次只禁用一个插件,确认影响范围后再决定是否长期保留。
