athas热更新代码

热更新

热更新有什么用?比如,生产环境有一个逻辑不小心写错了,导致资产损失。
如果修改代码,重新发布到生产环境,需要的时间比较长,而且生产环境重启,也可能会影响到其他的用户。
热更新,可以不用重启环境,修改代码对应的字节码,达到修改功能的目的。

一、jad反编译

星号*表示匹配任意路径,也可以直接写具体的路径。

#  --source-only,表示只打印源代码
jad --source-only *.TestController > TestController.java

在>符号后面,可以指定输出的路径以及编译后的文件,放在对应的路径。
最好指定输出的路径,找起来比较方便。
如下:

jad --source-only *.TestController > /arthas/TestController.java

二、修改代码

通过 vim 等编辑器修改第一步输出的文件 /arthas/TestController.java ,修改代码。

三、mc 内存编译

编译修改过后的代码。如下:
-d 指定输出的路径

[arthas@14388]$ mc /arthas/TestController.java -d /arthas
Memory compiler output:
E:\arthas\com\example\demo\controller\TestController.class
Affect(row-cnt:1) cost in 1734 ms.

四、热更新代码

retransform 热更新代码。

redefine也可以热更新。redefine命令与arthas其他增强命令trace/watch/tt等命令冲突,两者会相互重置。

所以推荐使用retransform命令;

[arthas@14388]$ retransform E:/arthas/com/example/demo/controller/TestController.class
retransform success, size: 1, classes:
com.example.demo.controller.TestController

Arthas热更新,有哪些要注意的?

  • Arthas热更新,不支持新增类的属性、方法参数
    只能在原来的方法上修改逻辑。

  • Arthas热更新,不支持依赖注入
    如果需要依赖注入,可以使用 ApplicationContxt 在方法中初始化对象。

posted on   乐之者v  阅读(97)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-07-16 final关键字的简单理解
2018-07-16 阻塞队列实现生产者消费者模式
2018-07-16 Ssm框架常见报错
2018-07-16 Git报错的解决方案汇总
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示