arthas热更新,容器内bean实例的成员属性

背景:一个定时任务在不同的环境下,switch开关状态不同,要求只在正式生产环境这个开关是打开的,但是由于版本控制问题,这开关配置的配置文件不是最新代码高度。就导致代码中取这个值时,发现是一个空值,导致了空指针异常。并且定时任务中的任务也不能正常使用。

难点:由于是生产环境,这个不能只因为这么一个bug,就将整个服务器重启。就需要有一个热更新一样的操作。将实例内的成员变量值,从null变为true。

主要用到的命令:

sc -d com.cyou.dream.scheduled.task.FixedTimeTasks
options strict false
ognl -c 67b92f0a '#context=@org.gamedo.ApplicationBase@context(),#context.getBean("fixedTimeTasks").aSwitch=true' -x 2
ognl -c 67b92f0a '#context=@org.gamedo.ApplicationBase@context(),#context.getBean("fixedTimeTasks").aSwitch' -x 2

解释:

sc -d com.cyou.dream.scheduled.task.FixedTimeTasks

用法: cs -d  加一个类的全路径名称

这个命令sc,是查询一个类,加-d是查询这个类的详细信息会出现以下数据。

其中框出来的是重要数据后面会用到。

options strict false

这一步会让后续的ognl命令忽略报错。

ognl -c 71bc1ae4 '#context=@org.gamedo.ApplicationBase@context(),#context.getBean("fixedTimeTasks").aSwitch' -x 2

以上代码查看成员变量的值如下:

ognl -c 71bc1ae4 '#context=@org.gamedo.ApplicationBase@context(),#context.getBean("fixedTimeTasks").aSwitch=true' -x 2

其中    71bc1ae4    就是被框起来的部分,是这个示例的id

org.gamedo.ApplicationBase是启动类

fixedTimeTasks目标实例

aSwitch就是我要改的变量值

改变结果如下:

修改完毕!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏与ta

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值