1. 程式人生 > 實用技巧 >熱部署只知道devtools嗎?JRebel不香嗎?

熱部署只知道devtools嗎?JRebel不香嗎?

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

目錄

  • 前言
  • JRebel收費怎麼破?
  • 什麼是本地熱部署?
  • 什麼是遠端熱部署?
  • JRebel和devtools的區別
  • 如何安裝JRebel?
  • 如何本地熱部署?
  • 如何遠端熱部署?
  • 多模組開發的一個坑
  • 總結

前言

Spring Boot中的熱部署相信大家用的最多的就是devtools,沒辦法,官推的。

JRebel相對於devtools,個人覺得無論是載入速度還是使用便捷,JRebel完勝。

作為前輩級別的開發利器,JRebel真的值得開一章節來好好介紹下。

JRebel收費怎麼破?

前面作者單獨寫過一篇啟用JRebel的文章教程,沒錢的可以去看看:擼了個反向代理工具,搞一搞JRebel

特此宣告:作者支援原版,不差錢的建議裝個原版的,畢竟這麼好的工具值得。

什麼是本地熱部署?

傳統的開發中,專案在啟動過程中程式碼有所改動是不會重新編譯執行的,而是要關閉專案重新啟動後修改的程式碼才會生效。

本地熱部署則是能夠在專案執行中感知到特定檔案程式碼的修改而使專案不重新啟動就能生效。

什麼是遠端熱部署?

遠端熱部署的遠端兩字指的是遠端伺服器,平時開發中,只要原生代碼改動了,必須要重新打包上傳伺服器重新啟動之後才會生效,你這樣幹過嗎?.......

嗯?好像幹過

遠端熱部署則是原生代碼改變之後,不用重新打包上傳伺服器重啟專案就能生效,本地改變之後能夠自動改變伺服器上的專案程式碼。

有些人聽到這裡懵逼了,這是什麼鬼?還有這麼神奇的東西...........

別驚訝,就是這麼神奇

JRebel和devtools的區別

前輩和後輩的比較其實沒什麼可比性,如果不是JRebel收費了,絕對是所有程式設計師的首選。但還是要說說他們之間的區別,如下:

  1. JRebel載入的速度優於devtools
  2. JRebel不僅僅侷限於Spring Boot專案,可以用在任何的Java專案中。
  3. 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這個檔案是JRebellib目錄下的檔案。

-Xdebug之後,-jar之前的命令是開啟遠端除錯的,如果不需要的可以去掉,不知道遠端除錯的,可以看:驚呆了!Spring Boot還能開啟遠端除錯~

專案啟動成功後,伺服器上的配置就完成了。

此時在IDEA中需要設定連線到剛才啟動的專案,開啟File->setting->JRbel&XRebel->JRbel Remote Servers,如下圖:

步驟如下:

  1. 點選+號新增一個服務
  2. 填寫資訊
  • server name隨便起個服務的名字
  • server URL格式:http://ip:port,這裡的ip是伺服器的IP,port是專案埠號。
  • 遠端密碼則是上文設定的JRebel的密碼123456789
  1. 點選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能夠提高讀者們的開發效率,反正我是提高了,哈哈~