持續原創輸出,點擊上方藍字關注我

目錄
-
前言 -
JRebel收費怎么破? -
什么是本地熱部署? -
什么是遠程熱部署? -
JRebel和devtools的區別 -
如何安裝JRebel? -
如何本地熱部署? -
如何遠程熱部署? -
多模塊開發的一個坑 -
總結
前言
Spring Boot
中的熱部署相信大家用的最多的就是devtools
,沒辦法,官推的。
JRebel
相對於devtools
,個人覺得無論是加載速度還是使用便捷,JRebel
完勝。
作為「前輩級別」的開發利器,JRebel
真的值得開一章節來好好介紹下。
JRebel收費怎么破?
前面作者單獨寫過一篇JRebel
的文章教程,沒錢的可以去看看:擼了個反向代理工具,搞一搞JRebel。
「特此聲明」:作者支持原版,不差錢的建議裝個原版的,畢竟這么好的工具值得。
什么是本地熱部署?
傳統的開發中,項目在啟動過程中代碼有所改動是不會重新編譯運行的,而是要關閉項目重新啟動后修改的代碼才會生效。
「本地熱部署」則是能夠在項目運行中感知到特定文件代碼的修改而使項目不重新啟動就能生效。
什么是遠程熱部署?
遠程熱部署的遠程
兩字指的是「遠程服務器」,平時開發中,只要本地代碼改動了,必須要重新打包上傳服務器重新啟動之后才會生效,「你這樣干過嗎?.......」

「遠程熱部署」則是本地代碼改變之后,不用重新打包上傳服務器重啟項目就能生效,本地改變之后能夠自動改變服務器上的項目代碼。
有些人聽到這里懵逼了,這是什么鬼?還有這么神奇的東西...........

JRebel和devtools的區別
前輩和后輩的比較其實沒什么可比性,如果不是JRebel「收費」了,絕對是所有程序員的首選。但還是要說說他們之間的區別,如下:
-
JRebel
加載的速度優於devtools
-
JRebel不僅僅局限於Spring Boot項目,可以用在任何的Java項目中。 -
devtools
方式的熱部署在功能上有限制,方法內的修改可以實現熱部署,但新增的方法或者修改方法參數之后熱部署是不生效的。
如何安裝JRebel?
本地熱部署只需要在IDEA
中裝一個JRebel的插件,遠程熱部署需要在服務器上裝一個JRebel,這兩種方式在上一篇文章都介紹過,不會的可以去看看:擼了個反向代理工具,搞一搞JRebel。
如何本地熱部署?
JRebel
插件安裝完成之后,將IDEA
中的自動編譯
開啟,然后找到IDEA
中的JRebel
的工具面板,將所需要熱部署的項目或者模塊勾選上即可,如下圖:

勾選成功之后將會在項目或者模塊的
src/resource
下生成一個rebel.xml
文件。
此時在Spring Boot
的主啟動類上右鍵,將會出現以JRebel
啟動的選項,如下圖:

當然在IDEA
的右上角也存在啟動的按鈕,如下圖:

①
是本地啟動和DEBUG
模式啟動,②
是遠程熱部署的時候更新按鈕。
此時就已經配置成功了,如果勾選的項目或者模塊出現了改變,按CRTL+SHIFT+F9
則會自動重新編譯加載改變的部分,不用再重新啟動項目了。
如何遠程熱部署?
遠程熱部署需要在服務器上安裝並JRebel
,參照上篇文章:擼了個反向代理工具,搞一搞JRebel。
成功后需要設置遠程連接的密碼,在JRebel
的根目錄下執行以下命令:
java -jar jrebel.jar -set-remote-password 123456789
此處設置的
123456789
則是遠程的密碼,在IDEA
連接服務器的時候需要。
服務器配置成功后,在IDEA中JRebel的面板中設置遠程熱部署的模塊,如下圖:

勾選成功后,將會在
src/resource
下生成一個rebel-remote.xml
文件。
此時將Spring Boot
項目打包成一個Jar
,上傳到服務器,執行以下命令啟動項目:
nohup java -agentpath:/usr/local/jrebel/lib/libjrebel64.so -Drebel.remoting_plugin=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9083 -jar xxx.jar &
libjrebel64.so
這個文件是JRebel
的lib
目錄下的文件。
-Xdebug
之后,-jar
之前的命令是開啟遠程調試的,如果不需要的可以去掉,不知道遠程調試的,可以看:驚呆了!Spring Boot還能開啟遠程調試~。
項目啟動成功后,服務器上的配置就完成了。
此時在IDEA中需要設置連接到剛才啟動的項目,打開File->setting->JRbel&XRebel->JRbel Remote Servers
,如下圖:

步驟如下:
-
點擊 +
號添加一個服務 -
填寫信息
-
server name
隨便起個服務的名字 -
server URL
格式:http://ip:port
,這里的ip
是服務器的IP,port
是項目端口號。 -
遠程密碼則是上文設置的 JRebel
的密碼123456789
。
-
點擊 OK
,即可添加成功。
以上設置成功后,點擊右上角的遠程部署按鈕,下圖中的②
號按鈕,則會自動更新服務器上已啟動項目的代碼使之本地修改在服務端自動生效:

在JRebel Console
這個面板中將會打印出遠程熱部署更新的日志信息,如下圖:

只要本地有了更改,點擊遠程熱部署按鈕,則會自動上傳代碼到服務器端並實時更新,不用重新啟動項目。
多模塊開發的一個坑
如果是多模塊開發,比如分為api
(最終的Jar
包),core
(核心包),service
(業務層的包),最終打包運行在服務器端的是api
這個模塊,其余兩個模塊都是屬於依賴模塊,雖然在JRebel
遠程熱部署選項中都勾選了,但是它們的代碼更改並不會在服務端生效。
這個如何解決呢?很簡單,在api
項目下的rebel-remote.xml
文件中將其余兩個模塊添加進去,默認的如下:
<?xml version="1.0" encoding="UTF-8"?>
<rebel-remote xmlns="http://www.zeroturnaround.com/rebel/remote"> <id>xx.xx.xx.api</id> </rebel-remote>
添加之后的代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<rebel-remote xmlns="http://www.zeroturnaround.com/rebel/remote"> <id>xx.xxx.xx.api</id> <id>xx.xx.xx.service</id> <id>xx.xx.xx.core</id> </rebel-remote>
以上的
<id>
標簽中指定的是模塊的包名(package)。
總結
作為熱部署界的前輩,JRebel
依然是敵得過后浪,果然是姜還是老的辣......
希望這篇文章介紹的JRebel
能夠提高讀者們的開發效率,反正我是提高了,哈哈~