热重载 beta
传统编写代码时,需要重启应用才能生效,而热重载可以在不重启应用下让编写的代码生效立刻,让开发者编写的代码改动瞬间生效,极大提升迭代效率。支持类(包括代理类)的属性和方法变动、Spring、Mybatis等主流框架。同时适配 jdk8、jdk11、jdk17、jdk21 等多个JDK版本。
1. 开启热重载
点击 图标变为
表示开启热重载,大飞机模式下启动项目热重载即可生效。
- 关闭状态
- 开启状态
TIP
热重载需要特定的jdk才能生效,请先参考JDK安装完成JDK的初始化
启动项目如果提示
DCEVM is not installed
,检查JDK安装是否正确。JDK8 检查命令java -XXaltjvm=dcevm -version
是否能正常输出。
2. 触发热重载
在大飞机的状态下启动应用,项目输出如下日志,并打印载入的热重载插件。
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 编译项目
应用启动后可以通过编译构建的方式触发热重载
2.2 Debug热更新
如果应用通过 Debug
的方式启动,则可以通过下面方式触发热重载,同时还可以更新断点信息。
- 通过右键菜单的
Compile and Reload Modified Files
按钮.
- 文件主页面的
Code changed
按钮.
2.3 热部署
点击 按钮唤醒主页面。
选择要部署的文件后
Compiler Type
: 文件的编译方式Local Intellij Idea
:通过 idea 编译器来编译变动的文件Remote Attach Application
:通过附着应用远程动态编译变动的文件
Select Type
:文件选择的方式Java
:变动的 java 文件Resources
:变动的资源文件(待)Vcs
:选中通过 vcs工具来获取文件变动,不选中通过 文件修改时间 来获取文件变动
点击 OK
按钮,等待编译完成,编译完成后,会弹出编译成功的提示。
TIP
- 只有附着应用后才支持通过热部署的方式热重载变动文件
- 使用远程动态编译时,附着应用必须要通过 JDK 启动,不能使用 JRE 启动。
TIP
热部署时idea可能有时无法获取到最新的断点信息,如果需要及时更新断点请使用方式2
2.4 单文件远程编译install.md
通过右键菜单的 Remote Compile 'xxx' to Hot Reload
按钮可以通过远程动态编译的方式热重载单个变动文件.
热部署完成后,会弹出编译成功的提示。
TIP
- 只有附着应用后才支持通过热部署的方式热重载变动文件
- 使用远程动态编译时,附着应用必须要通过 JDK 启动,不能使用 JRE 启动。
TIP
热部署时idea可能有时无法获取到最新的断点信息,如果需要及时更新断点请使用方式2
2.5 单XML文件
变动的 xml
文件可以还可以通过右键菜单的 Compile 'xxx.xml' to Target
方式单独触发热重载.
TIP
- 实现方式就是将 xml 文件从
src/main/resources
移动到对应的target/
下。 - 也可以通过方式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
反射工具类BeanDesc
bean描述符JSONUtil
json工具类
3.8 Gson
支持 Gson 工具包热重载
3.9 EasyExcel
支持 EasyExcel 热重载
3.10 Jackson
支持 Jackson 热重载
3.11 FastJson、FastJson2
3.12 hibernate-validator
支持 hibernate-validator 工具包热重载
3.13 其他
其他情况热重载尝试一下,这里不一一举例了,如果不能生效麻烦提交个 issues 反馈一下。