一种简单快捷的 java 热部署方式
作者 | 周忠太 阿里巴巴淘系技術部的一個搬磚工
【Arthas 官方社區正在舉行征文活動,參加即有獎品拿~點擊投稿】
Arthas Hot Swap 插件介紹
引言
熱部署是幫助開發人員提高效率的利器,如果你的開發語言是 java,開發環境是遠程服務器,遠程服務器 debug 端口被限制,那么你可能無法通過 debug HotSwap 實現熱部署,那么本文介紹的 IntelliJ IDEA 插件可以幫助你在遠程服務器實現熱部署,而且操作簡單快捷。
本文熱部署插件(Arthas Hot Swap)是基于 Arthas redefine 命令實現的,使用該插件進行遠程熱部署無需任何配置,無需使用 debug 端口,只需幾個簡單動作就能完成。gitHub 地址:https://github.com/xxxtai/arthas-hotswap
使用方法
第一步:選擇 Arthas Hot Swap 插件選項
第二步:登錄遠程服務器粘貼命令并執行
第三步:執行完成,熱部署成功
熱部署的限制
由于是基于 Arthas 的 redefine 命令實現的熱部署,redefine 又是基于 Instrumentation API 實現的熱部署,所以和 IDEA 的 debug HotSwap 是有一樣的限制。限制如下:無法修改類名、方法名,無法修改類屬性名稱,無法新增類屬性,無法新增非靜態方法。由于本插件暫時無法獲取內部類的 class 文件,所以暫時不支持修改內部類。
Arthas Hot Swap 插件原理
Arthas 是阿里巴巴開源的 Java 代碼診斷工具。Arthas 的 redefine 命令是基于 Instrumentation API 實現的熱部署,因此和 HotSwap 熱部署方式一樣,有同樣的限制。Arthas 的 redefine 命令其實是把 Instrumentation API 的redefineClasses 方法包裝后提供給用戶,那么我們就可以根據 redefine 命令發揮想象力,實現熱部署。
Arthas 官方文檔推薦使用 jad/mc/redefine 等一連串命令實現 class 遠程熱替換,流程大概是:jad 命令對老 class 進行反編譯 ->vim 編輯源碼 ->mc 命令編譯源碼 ->redefine 熱替換 class。這種方式存在兩個問題:一是太麻煩,二是 mc 編譯大概率會失敗。如果能這樣就好,本地修改代碼編譯后上傳 class 文件到遠程服務器,再使用 redefine 命令熱替換 class。因此官方文檔又推薦,首先將 class 二進制文件轉換成 base64 編碼,然后再復制粘貼到遠程服務器,再把 base64 編碼轉換成 class 文件,最后,使用 redefine 進行熱替換。這么麻煩,還不如重新部署呢。所以 redefine 命令比較雞肋。
Arthas 官方推薦的熱替換方法最大的問題在于,上傳 class 文件到遠程服務器進行熱替換的流程太麻煩,那么這些麻煩且固定的流程為何不交給機器來做呢。所以,本文推薦的“Arthas Hot Swap”插件就有必要了,該插件就是為了提升使用 Arthas 進行熱替換的效率,幾個簡單的動作就能熱替換一個 class 文件,可以解決開發過程中 80% 的熱部署需求,剩下的 20% 用重新部署解決就好了。
Arthas Hot Swap 插件執行流程
遠程服務端熱部署執行流程
Arthas 征文活動火熱進行中
Arthas 官方正在舉行征文活動,如果你有:
- 使用 Arthas 排查過的問題
- 對 Arthas 進行源碼解讀
- 對 Arthas 提出建議
- 不限,其它與 Arthas 有關的內容
歡迎參加征文活動,還有獎品拿哦~點擊投稿
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的公眾號。”
總結
以上是生活随笔為你收集整理的一种简单快捷的 java 热部署方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科普|不同协议下远程服务器文件上传_下载
- 下一篇: 当 Kubernetes 遇到机密计算,