IDEA插件 - Java 热部署HotSeconds,可实现一键化秒级热更新


前言

我们在开发调试的过程中,经常在打包和重启服务器中消耗大量的时间,这将浪费我们大量的青春,这里介绍一款本人开发的 Java 远程热部署插件 HotSeconds ,包括 HotSecondsServer 和 HotSecondsClient ,相对传统部署来说,效率可以提升百倍。

功能介绍

1.热部署代码

包括修改代码,新增字段,新增方法,新增类,打破了原生 JDK 中 Instrument 机制只能修改方法体的不足。同时还支持一些常用框架的热更新,比如 Spring 新增一个 Autowired 字段或者 SpringMVC 新增一个 Controller 方法,也是支持热更新的。

2.热部署资源文件

在资源文件上右键也可以选择 Hot swap this file to remote ,比如 MyBatis 的 xml 文件,就能直接热更新生效,那么资源文件是怎么实现热部署的呢? 这里是根据 Path mappings 中的路径映射,将本地的资源文件热部署到远程对应目录,但是资源文件非常复杂,比如 xml ,html, css, js ,properties 等等文件,框架也非常的多,又是怎么实现热部署的呢? 路径映射只是将文件上传到服务器端,真正生效的是上传完之后刷新资源文件的缓存的逻辑,这就涉及到插件扩展,本插件内核集成了 MyBatis 和 MyBatis Plus 的 xml 的热更新,更多的资源文件热更新,详见插件扩展。

3.批量热更新修改的文件

修改了多个文件的情况下,直接打开热部署面板,可将修改过的文件热部署到服务器,支持按文件修改时间戳热部署,也可以将版本控制下(Git/SVN 等)未提交的文件热部署

4.执行远程函数

无需调用远程 Http 或者 RPC 接口,就能直接触发需要的函数,这对于调试来说可是非常方便的,当然也包括在沙箱环境修复脏数据。
直接在函数上右键选择远程执行函数,即可触发具体的函数逻辑,这里分为四种情况,静态,非静态,有参数,无参数。
无参数可以直接触发,如果是非静态字段,会弹出当前类的所有对象的选择框,选择后触发。
有参数的情况,会弹出对象选择框和参数输入框,输入选择后触发逻辑。
目前参数只支持 byte,short,boolean,char,int,double,float,long,BigDecimal 。
复杂参数的函数,可以写一个静态无参的函数,触发需要的函数,然后远程热部署整个新写的静态无参的函数的类即可。

5.远程查看字段值

包括静态字段和非静态字段,直接在字段上右键,就能查看该字段的值。 非静态字段是先弹出显示当前类的所有对象实例的框,选择具体的对象后即可获取该对象的字段值。

6.jar 包热更新

在打开的 jar 上面右键,可以看到两个选项,Hot deploy the Jar to remote 和 Hot swap this file to remote 。 前者是将整个 jar 的所有 class 热部署的服务器,后者只热更新选中的 class 。

7.远程编译并热部署

在 java 文件上右键选中 Hot swap this file to remote ,会在本地编译然后热更新到远程,但是有的时候本地编译并不方便,比如本地和远程服务器的 JDK 版本可能存在巨大的差异,这个时候就需要远程编译了。
在 java 文件上右键,选择 Remote compilation and hot swap 可以在远端编译并热更新。

安装教程

详见https://github.com/Liubsyy/HotSecondsIDEA


文章作者: 阿坤
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 阿坤 !
  目录