使用Arthas更新線上jar包代碼

在實際項目中,打包之後發現代碼錯誤,要麼重新打包,要麼替換掉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文件

這樣,我們在不停服務器的情況下,更新了服務器的代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章