使用Arthas更新线上jar包代码

实际项目打包后代码出错,重新打包或替换jar包中class文件都需停服务器,可能造成损失。本文介绍利用Arthas热更新jar包文件,包括写测试接口、打包发布、修改方法内容、重新编译得class文件,下载运行Arthas,选择对应pid执行命令,不停服务器更新代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际项目中,打包之后发现代码错误,要么重新打包,要么替换掉jar包中的class文件,但是这两种方法都需要停掉服务器,可能会造成一定的损失,

下面介绍利用arthas来热更新jar包中的文件

首先我们写一个测试接口,

@RestController
@RequestMapping("/test")
public class testMain {



    @GetMapping("replace")
    public void test(){

        System.out.println("===========================================");
        System.out.println("=============replace   befor   ============");
        System.out.println("===========================================");
    }
}

并且打包发布,通过url访问测试结果

一切正常

现在修改test方法中的内容

public class testMain {



    @GetMapping("replace")
    public void test(){

        System.out.println("===========================================");
        System.out.println("=============replace   after   ============");
        System.out.println("===========================================");
    }
}

重新编译之后,得到class文件

我们下载arthas文件,下载地址https://alibaba.github.io/arthas/install-detail.html#

执行arthas-boot.jar可执行文件,运行起来,我们会得到正在运行的java进程

(建议在jdk安装目录下启动)

选择需要更新jar包的对应pid

 执行命令

sc -d 类名 grep classLoaderHash

得到classLoaderHash为20ad9418

执行命令

redefine -c 20ad9418 待替换的class路径

 

这样,我们再去测试刚才的接口

 

我们得到替换之后的class文件

这样,我们在不停服务器的情况下,更新了服务器的代码

Arthas 是一个开源的Java诊断工具,可以帮助开发者在生产环境中诊断和排查问题。通过Arthas,你可以动态地执行线上Spring Boot应用中的方法,而不需要重启应用。以下是如何使用Arthas执行线上Spring Boot方法的步骤: 1. **安装Arthas**: 首先,确保你已经下载并安装了Arthas。可以通过以下命令下载: ```sh wget https://alibaba.github.io/arthas/arthas-boot.jar ``` 2. **启动Arthas**: 使用`java -jar`命令启动Arthas: ```sh java -jar arthas-boot.jar ``` 启动后,Arthas会列出当前运行的Java进程,选择你要诊断的Spring Boot应用的进程ID。 3. **使用`jad`命令反编译类**: 首先,使用`jad`命令反编译你想要执行的类和方法: ```sh jad com.example.demo.MyService ``` 这会显示类的源代码,方便你确认方法签名。 4. **使用`ognl`命令执行方法**: 使用`ognl`命令执行你想要调用的方法。例如,假设你要调用`com.example.demo.MyService`类中的`myMethod`方法: ```sh ognl 'com.example.demo.MyService@myMethod()' ``` 如果方法需要参数,可以这样调用: ```sh ognl 'com.example.demo.MyService@myMethod("参数1", 123)' ``` 5. **查看结果**: 执行命令后,Arthas会返回方法的执行结果。你可以在控制台中查看输出。 通过以上步骤,你可以在不重启应用的情况下,动态地执行线上Spring Boot应用中的方法。这对于排查问题和进行临时性调试非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值