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

319 天前
 liubsyy

前言

我们在开发调试的过程中,经常在打包和重启服务器中消耗大量的时间,这将浪费我们大量的青春,这里介绍一款本人开发的 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

1923 次点击
所在节点    Java
7 条回复
zjp
319 天前
和 DCEVM + HotswapAgent 的区别是什么
weijancc
318 天前
热部署太扯了, 谁敢用哦, 我经常使用的 Jrebel 在开发阶段热加载, 算是很成熟了, 会有几个问题, 例如修改现有的 Controller 方法, 增加一个 final 字段, 这些不重启是无法热加载, 正式生产环境不可能使用热部署, 你把这个当成 Jrebel 的替代品还有可行之处.
liubsyy
318 天前
@weijancc 可能是我没说太详细,我也没说用于线上热部署啊,真正的作用就是用于测试和沙箱环境,可以节省冷部署的时间提高开发效率
liubsyy
318 天前
@zjp 支持远程热更新,支持多台服务器(集群)热部署,一键化操作,支持所有的容器环境,更多的框架支持,更简单灵活的扩展,本地-远程如果端口不能直连还提供了代理服务器模式,除此之外,还增加了一些其他的功能,比如远程执行函数,远程获取字段等,形成了从开发-调试-线上修数(沙箱环境)一套完整的闭环。
dif
318 天前
用了很久的 jrebel ,因为无法白嫖,今年已经强迫自己放弃使用热部署,方便确实方便,但重启一下可以获得短暂得摸鱼时间,比如现在。
XinSong
318 天前
@dif 白嫖还是可以的,就是如果是公司网的话,确实容易被=v=
liubsyy
317 天前
@dif 哈哈,你说出了很多人不爱用热部署的真相

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1006647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX