溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解簡(jiǎn)單快捷的 java熱部署方式

發(fā)布時(shí)間:2021-11-20 16:47:04 來(lái)源:億速云 閱讀:102 作者:柒染 欄目:云計(jì)算

如何理解簡(jiǎn)單快捷的 java熱部署方式,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

Arthas Hot Swap 插件介紹

引言

熱部署是幫助開(kāi)發(fā)人員提高效率的利器,如果你的開(kāi)發(fā)語(yǔ)言是 java,開(kāi)發(fā)環(huán)境是遠(yuǎn)程服務(wù)器,遠(yuǎn)程服務(wù)器 debug 端口被限制,那么你可能無(wú)法通過(guò) debug HotSwap 實(shí)現(xiàn)熱部署,那么本文介紹的 IntelliJ IDEA 插件可以幫助你在遠(yuǎn)程服務(wù)器實(shí)現(xiàn)熱部署,而且操作簡(jiǎn)單快捷。

本文熱部署插件(Arthas Hot Swap)是基于 Arthas redefine 命令實(shí)現(xiàn)的,使用該插件進(jìn)行遠(yuǎn)程熱部署無(wú)需任何配置,無(wú)需使用 debug 端口,只需幾個(gè)簡(jiǎn)單動(dòng)作就能完成。gitHub 地址:https://github.com/xxxtai/arthas-hotswap

使用方法

  1. IntelliJ IDEA 安裝插件“Arthas Hot Swap”,從 gitHub Releases 下載安裝包;

  2. 熱部署使用的是 class 文件,所以需要先使用“mvn compile”編譯相關(guān)工程,后續(xù)可以使用 IDEA 的 Recompile 編譯單個(gè)文件,節(jié)省編譯時(shí)間;

  3. 選擇需要熱部署的 java 源文件或者 class 文件,在類名或方法名上單擊右鍵,選擇“Arthas Hot Swap”的“Swap this class”,插件后臺(tái)執(zhí)行成功后會(huì)把熱部署需要的命令復(fù)制到粘貼板;

  4. 登錄遠(yuǎn)程服務(wù)器,粘貼熱部署命令并執(zhí)行,熱部署完成,該機(jī)器運(yùn)行著最新的class。機(jī)器第一次執(zhí)行熱部署命令,可能失敗,再執(zhí)行一次試下。

如何理解簡(jiǎn)單快捷的 java熱部署方式

第一步:選擇 Arthas Hot Swap 插件選項(xiàng)

如何理解簡(jiǎn)單快捷的 java熱部署方式

第二步:登錄遠(yuǎn)程服務(wù)器粘貼命令并執(zhí)行

如何理解簡(jiǎn)單快捷的 java熱部署方式

第三步:執(zhí)行完成,熱部署成功

熱部署的限制

由于是基于 Arthas 的 redefine 命令實(shí)現(xiàn)的熱部署,redefine 又是基于 Instrumentation API 實(shí)現(xiàn)的熱部署,所以和 IDEA 的 debug HotSwap 是有一樣的限制。限制如下:無(wú)法修改類名、方法名,無(wú)法修改類屬性名稱,無(wú)法新增類屬性,無(wú)法新增非靜態(tài)方法。由于本插件暫時(shí)無(wú)法獲取內(nèi)部類的 class 文件,所以暫時(shí)不支持修改內(nèi)部類。

Arthas Hot Swap 插件原理

Arthas 是阿里巴巴開(kāi)源的 Java 代碼診斷工具。Arthas 的 redefine 命令是基于 Instrumentation API 實(shí)現(xiàn)的熱部署,因此和 HotSwap 熱部署方式一樣,有同樣的限制。Arthas 的 redefine 命令其實(shí)是把 Instrumentation API 的redefineClasses 方法包裝后提供給用戶,那么我們就可以根據(jù) redefine 命令發(fā)揮想象力,實(shí)現(xiàn)熱部署。

Arthas 官方文檔推薦使用 jad/mc/redefine 等一連串命令實(shí)現(xiàn) class 遠(yuǎn)程熱替換,流程大概是:jad 命令對(duì)老 class 進(jìn)行反編譯 ->vim 編輯源碼 ->mc 命令編譯源碼 ->redefine 熱替換 class。這種方式存在兩個(gè)問(wèn)題:一是太麻煩,二是 mc 編譯大概率會(huì)失敗。如果能這樣就好,本地修改代碼編譯后上傳 class 文件到遠(yuǎn)程服務(wù)器,再使用 redefine 命令熱替換 class。因此官方文檔又推薦,首先將 class 二進(jìn)制文件轉(zhuǎn)換成 base64 編碼,然后再?gòu)?fù)制粘貼到遠(yuǎn)程服務(wù)器,再把 base64 編碼轉(zhuǎn)換成 class 文件,最后,使用 redefine 進(jìn)行熱替換。這么麻煩,還不如重新部署呢。所以 redefine 命令比較雞肋。

Arthas 官方推薦的熱替換方法最大的問(wèn)題在于,上傳 class 文件到遠(yuǎn)程服務(wù)器進(jìn)行熱替換的流程太麻煩,那么這些麻煩且固定的流程為何不交給機(jī)器來(lái)做呢。所以,本文推薦的“Arthas Hot Swap”插件就有必要了,該插件就是為了提升使用 Arthas 進(jìn)行熱替換的效率,幾個(gè)簡(jiǎn)單的動(dòng)作就能熱替換一個(gè) class 文件,可以解決開(kāi)發(fā)過(guò)程中 80% 的熱部署需求,剩下的 20% 用重新部署解決就好了。

Arthas Hot Swap 插件執(zhí)行流程

  1. 根據(jù)用戶選擇的源文件找到 class 文件,默認(rèn)在 /target/classes 路徑下面查找,用戶也可以直接選擇 class 文件;

  2. 使用 AES-128 加密 class 文件,輸出 base64 編碼;

  3. 加密的 class 文件上傳至 oss,返回 oss 訪問(wèn)地址;

  4. 渲染熱部署需要執(zhí)行的腳本,渲染后的腳本也上傳至 oss,返回 oss 訪問(wèn)地址;

  5. 組裝熱部署命令,并自動(dòng)復(fù)制到粘貼板。

遠(yuǎn)程服務(wù)端熱部署執(zhí)行流程

  1. 登錄遠(yuǎn)程服務(wù)器,粘貼熱部署命令并執(zhí)行;

  2. 下載熱部署腳本,執(zhí)行熱部署腳本;

  3. 創(chuàng)建工作空間;

  4. 檢查是否安裝 openssl,沒(méi)有安裝則進(jìn)行安裝;

  5. 下載 AES-128 加密的 class 文件;

  6. 使用 openssl enc 解密得到 class 二進(jìn)制文件;

  7. 通過(guò)腳本方式安裝 arthas;

  8. 創(chuàng)建與 arthas 通信的管道并啟動(dòng) arthas;

  9. arthas 選擇 java 進(jìn)程,默認(rèn)選擇第一個(gè);

  10. arthas 執(zhí)行 redefine 命令熱替換 class 文件;

  11. 打印熱替換結(jié)果。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI