首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
基于arthas热更新class脚本
返回列表
发新帖
基于arthas热更新class脚本
[复制链接]
发表于 2023-2-7 15:51:52
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
1. 概述
本地更新脚本是基于arthas工具的retransform命令热替换class,此方法用于在不重启项目的前提下,替换更新的class,如关键类添加打印
日志
,排查线上问题
但是arthas工具的命令稍显复杂,有那个时间还不如重新部署,因此需要一个可以快速替换的工具来进行替换
2. 方法一:ArthasHotSwap插件
使用idea插件 ArthasHotSwap插件,安装后,选中类名数据右键点击“swap this class”,会复制一个脚本,然后粘贴到项目启动的
服务器
上,可完成替换,具体网上均有教程,此处不多赘述。
3. 方法二:自定义shell脚本
我本人也使用过这个插件,但是试过几次均没有成功因此模仿ArthasHotSwap插件的流程,写了一个自定义脚本。
3.1. ArthasHotSwap 插件流程
大致流程如下:
1.将本地需替换的class文件,编码成base64文本文件,并上传至文件
服务器
(可能是OSS)
2.提供一个默认执行脚本,给用户复制
3.用户拿到复制脚本后,在
服务器
上执行
4.脚本下载base64文本文件,并解析成class文件
5.启动arthas命令,如果用户没有安装,脚本会自动安装,默认路径 /home/用户名xxx/.arthas/
6.执行arthas中的retransform 命令,将解析出来的class文件替换至运行的jvm中
复制
代码
3.2. 自定义脚本
按照这个流程,自定义写了一个脚本,去掉了上传文件服务器步骤,只需要把许替换的文件上传至服务器指定目录,启动脚本时指定项目包名称,即可完成指定项目多个class文件热替换
#热刷新class指定路径
配置
updateClassPath="/tmp/replace"
#服务器上arthas路径
arthasPath="/home/cmp/.arthas/lib/3.6.7/arthas"
#入参 项目包名称,支持模糊匹配
projectName=$1
rm -f tmp_in
mknod tmp_in p
exec 8<> tmp_in
sh ${arthasPath}/as.sh --select $projectName <&8 &
echo "********************************************* Arthas HotSwap The Java Class *************************************************************"
sleep 1s
echo "
" >> tmp_in
sleep 3s
echo "开热加载......"
#遍历目录中的所有class文件
for file in ${updateClassPath}/*
do
echo ${file}
#如果file后缀是class 执行替换
if [ "${file##*.}" = "class" ]; then
#开始启动arthas项目
echo "热加载${file}"
echo "retransform ${file}" >> tmp_in
fi
done
echo "quit" >> tmp_in
复制
代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
返回列表
熊熊出没
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表