很多时候,出现线上问题,我们需要紧急修复程序并立马生效,使线上问题影响最小,所以我们需要线上更新部分程序,今天就以热更新com.example.demo.arthas.user.UserController为例,介绍Arthas工具如何热更新线上代码。
1. 下载arthas工具并运行
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
2. 反编译UserController类
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
4. 修改UserController.java
vim /tmp/UserController.java
5. sc查找加载UserController的ClassLoaderHash
sc -d *UserController | grep classLoaderHash
6. mc内存编译
mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
也可以通过mc -c /tmp/UserController.java -d /tmp,使用-c参数指定ClassLoaderHash
mc -c 1be6f5c3 /tmp/UserController.java -d /tmp
mc 参数:
-d 指定输出目录
-c 指定classloader hash –classLoaderClass 指定classloader类
7. 热更新上一步编译好的class
redefine /tmp/com/example/demo/arthas/user/UserController.class