介绍
这是一个java代码的热更工具,非常适合用来做线上bug的紧急修复,这个工具支持所有普通方法,静态方法的动态更新,原理是通过agent修改编译在java虚拟机上的字节码实现的。热更成功之后代码实时生效,不需要重启服务器。有了这个工具,可以直接避免线上的很多生产事故,避免因为代码Bug造成的重大损失。 目前支持JDK 8 ,JDK 11
注意事项
1、只支持热更Java类的方法体,包括普通方法和静态方法(但不能修改方体的参数和返回值)。
2、支持所有Spring管理的类。支持修改已经在缓存中的类对象。
3、热更的类必需Java的虚拟机加载过。
4、热更的方法内不能调用线上代码里未定义的方法或类,否则程序会直接报错退出。
使用说明
将下面所有文件上传到Java程序所在Linux服务器的某个目录中
hot_update.sh的内容:
效果展示:
为了方便展示。用一个5s轮询的定时器,分别调用TestService的静态方法staticTest和普通方法commonTest,同时,TestService是Spring管理的。 将代码部署到Linux服务器上,可以看到输出如下:
接下来,就可以修改方法内的代码,将AAA换成BBB ,并将编译后的class文件放到热更工具目录下的classes。
执行hotpupdate.sh 传入程序的端口号 观察日志输入:
到此。热更成功,非常丝滑。