利用JRebel進行遠程熱部署調試

一、背景

我的工作中有些頁面調試十分麻煩,例如一個支付頁面,調試遇到的難點就有:
1、工程依賴了Apollo,如果要本地調試,需要本地添加Apollo的相關Java參數。
2、進入到支付頁面前需要對用戶做OAUTH,有個回調地址需要在微信端配置,但是隻能配一個地址。如果本地要能正常跑起來,需要在Nginx配一些代理。
3、由於需要做OAuth的原因,這個頁面無法在瀏覽器通過F12進行調試。只能改完重新啓動應用後,手機掃碼再看效果。
由於問題1、2的原因,本地調試基本是無望的,只能寄希望於遠程調試。但是遠程調試需要反覆的拖包,重啓,然後手機掃碼看效果。我曾被這個支付頁面調試折磨了很久,直到我遇見了JRebel。

二、JRebel

JRebel是一款JAVA虛擬機插件,利用它,我們就可以在不進行重部署的情況下讓代碼的改變生效。這裏代碼包括JAVA代碼和xml、jsp等資源文件。當程序員在開發環境中對任何一個類或者資源作出修改的時候,這個變化會直接反應在部署好的應用程序上,從而跳過了構建和部署的過程。
可以看到,JRebel剛好解決了我的痛點。

三、安裝

1、 IDEA安裝JRebel插件

1-打開IDEA–>Settings,然後搜索Plugins,在下方點擊Browser Repositories,在彈出來的窗口搜索JRebel,然後安裝,如下所示:
在這裏插入圖片描述
如果下不下來,可以進行離線安裝,去官網JRebel插件下載離線插件包,如下所示:
在這裏插入圖片描述
離線包下載要快一點。下載完成後,繼續點擊打開IDEA–>Settings,然後搜索Plugins,選擇install from disk,安裝後重啓即可。

激活JRebel

因爲JRebel是收費軟件,所以需要激活它。好在網上有激活的反向代理軟件,下載地址:https://github.com/ilanyu/ReverseProxy/releases/tag/v1.4。window環境下下載紅框裏的即可:
在這裏插入圖片描述
下載完成後,雙擊打開,license sever就啓動了。然後繼續Settings–>JRebel,點擊Change lisense,如下所示:
在這裏插入圖片描述
在彈出來的窗口中選擇I already have a license,填寫好license server地址和用戶郵箱,點擊Change License即可。需要注意的是license server地址是:http://127.0.0.1:8888/uuid的形式,如下所示:
在這裏插入圖片描述
這樣IDEA端的JRebel就安裝完成了。

2-服務端安裝

如果需要遠程的應用能夠及時更新代碼,需要通過JRebel的Agent啓動應用。服務端如何處理,可以通過IDEA–>Settings–>JRebel–>start up查看,如下所示:
在這裏插入圖片描述
上面列舉出了在不同的環境下調試的步驟。我的服務器環境是linux 64位,應用是spring-boot2應用,需要遠程熱部署調試。因此根據上面的提示,需要做兩個事情:

1-服務器上安裝JRebel Agent文件

找到我們插件安裝的位置,我的電腦是如下位置:
在這裏插入圖片描述
拷貝libjrebel64.so文件,然後放置在服務器上面,如下所示:
在這裏插入圖片描述

2-腳本添加啓動參數

JRebel Agent文件安裝好後,我們在應用啓動腳本里的DEBUG參數添加上面給出的參數:

if [ 'x'$DEBUG_PORT != 'x' ]; then
        DEBUG_OPTION="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=$DEBUG_PORT,suspend=n -agentpath:/home/xxx/server/bin/jrebel/jrebel6/lib/libjrebel64.so -Drebel.remoting_plugin=true"
fi

其中

-agentpath:/home/xxx/server/bin/jrebel/jrebel6/lib/libjrebel64.so -Drebel.remoting_plugin=true

就是此次新增的參數,這樣應用啓動就會通過JRebel 的Agent啓動了。

四、熱部署操作步驟

JRebel的安裝工作做完了,接下來就開始進行熱部署操作了。
首先,我們需要更改兩個配置:
1-IDEA設置compile勾選自動編譯。如下所示:
在這裏插入圖片描述
2-ctrl+shift+A 或者 help->find action…打開,然後搜索registry。找到 compiler.automake.allow.when.app.running 並勾上。如下所示:
在這裏插入圖片描述
然後我們新增remote server,如下所示:
在這裏插入圖片描述
Server Name是我們的工程名稱,Server Url是應用啓動後的訪問地址,記住不是Debug端口。填好後,點擊Test Connection,如果連上了就表示沒問題了。
最後IDEA JRebel窗口勾選需要熱部署的工程,此時會生成兩個xml文件。服務端就是根據這個文件來判斷是哪個工程需要熱部署。如下所示:
在這裏插入圖片描述
如果有多個Remote Server,可以點擊左邊的鉛筆按鈕,然後選擇使用哪個Remote Server。
這樣,我們熱部署就操作完了。重新打個包(保證生成的xml文件在包裏面),部署上去,之後就可以進行熱部署聯調了。
當我們更新jsp文件後,點擊同步按鈕,就可以看到是否同步成功了,如下所示:
在這裏插入圖片描述
然後開始愉快的調試吧!

五、參考文檔

1、Enable JRebel remote server support on the server
2、Intellij熱部署插件JRebel
3、JRebel遠程熱部署springboot教程(我們的情況下,服務端不需要安裝獨立版JRebel)

說明:

這篇文章僅僅講解如何進行遠程熱部署調試,重在熱部署。如果是本地調式代碼、或者遠程調試,而不需要更新代碼的,可以直接使用IDEA自帶的調試或者遠程調試功能,不需要費力使用JRebel。

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