【JAVA】遠程熱部署在美團的落地實踐,JRebel插件熱部署

Java系列 | 遠程熱部署在美團的落地實踐_美團技術團隊的博客-CSDN博客_java美團項目

JRebel熱部署的使用_閃閃Utaha的博客-CSDN博客_jrebel

IDEA JRebel插件熱部署 史上最全 - 掘金

IDEA集成JRebel實現熱部署以及遠程調試_Yvanzz的博客-CSDN博客_idea jrebel

JRebel Quick Start Guide for IntelliJ IDEA | JRebel & XRebel by Perforce

微服務開發神器之JRebel 插件破解和實現本地及遠程熱部署教程-阿里雲開發者社區

JreBel&idea2020&springboot

JreBel:實現了不需要重啓服務器達到熱部署項目效果,它會對你當前所編輯過的頁面進行編譯,大幅度減少了重啓服務器所帶來的等待時間。

注意事項:
c盤下的用戶名一定不能爲中文名稱,否則會一直提示路徑錯誤,目前測試全部失敗,以後的同學們安裝可以試一試,如果成功了就留個言
注意事項

1.0安裝jrebel插件

File–》Settings—》plugins----》marketplace----》搜索jrebel
在這裏插入圖片描述

1.1安裝成功後會重啓idea,出現下面的圖片

在這裏插入圖片描述

1.2配置jrebel插件


2.激活jrebel

2.1:先獲取GUID

在線生成GUID地址 (https://www.guidgen.com/), PS:如果失效刷新GUID替換就可以!

輸入url:https://jrebel.qekang.com/GUID(其中的GUID是2.1生成的,郵箱自己隨意填寫)

之前點擊藍色字體會出現這個窗口,將上面獲取到的GUID根據圖片提示輸入進去
在這裏插入圖片描述

如果沒有出現下面提示,請確定自己的網絡通暢,然後再次點擊激活,如果還不行,更改guid
在這裏插入圖片描述

  • 繼續點擊我同意【I agree】

3、JRebel 配置

3、1 將工作模式改成離線工作,!!!!

不修改成離線工作,你的jrebel會一直報錯,當然某些小夥伴的是沒有問題
在這裏插入圖片描述

  • 你的右上角會有兩個綠色的小圖標,這個就是jrebel啓動

在這裏插入圖片描述


4、使用jreBel

4、1 進行項目熱部署

  • 左下角有一個JreBel,點擊在打開的窗口,選擇你所需要進行熱部署的項目。
    在這裏插入圖片描述
    勾選後會生成一個rebel.xml文件,此文件可以忽略

在這裏插入圖片描述

4、3 更改後使用ctrl+f9實現不重啓服務器部署項目

  • 或者點擊小錘子也是
    在這裏插入圖片描述

4、4 錄製快捷鍵

  • 原有的保存操作不方便一隻手操作,設置新的快捷鍵方便操作
    -edit—>macros—>start macro recording
    在這裏插入圖片描述

  • 右下角會出現一個提示
    在這裏插入圖片描述

  • 然後點擊ctrl+F9,此時右下角會有提示,點擊紅色停止
    在這裏插入圖片描述

  • 會彈出一個窗口,在窗口中輸入build

在這裏插入圖片描述

  • 打開設置,找到kaymap

在這裏插入圖片描述

  • 右擊選擇第一個,在彈出的窗口輸入你想使用的快捷鍵,ctrl+s 已經被使用,建議使用alt+z或者alt+s

在這裏插入圖片描述

警告!!!

JreBel不適用於resources包下面的文件,修改此包下面的必須重啓,否則不生效。

 JRebel VS Spring-boot-devtools

  • 區別1:熱重啓VS熱重載:

        Srping-boot-devtools和JRebel最大的區別就是Srping-boot-devtools是熱重啓,而JRebel是熱重載。簡單來說Srping-boot-devtools每次變更類都會進行一次重啓,而JRebel每次類發生變更只是將變更的類重新加載,因此在效率上JRebel會更快。

這裏有兩個圖標,下面對應出現複選框,它的作用是幫助程序生成JRebel的配置文件。

配置文件的作用:JRebel 監控您對類和資源所做的更改 - 並智能地將它們反映在您的應用程序中。JRebel 需要知道你的類和資源在哪裏就是通過配置文件(rebel.xml)來查找。

兩個圖標的區別:

  • 用於本地項目調試時生成的配置文件rebel.xml

 

  • 用於遠程服務調試而生成的配置文件rebel-remote.xml

4.2 啓動項目測試

在IDEA右上角點擊綠色火箭圖標,第一個是表示正常啓動服務,第二個表示Debug模式啓動服務。

啓動時控制檯會輸出JRebel信息

 寫一個SpringBootDemo:

 
  1. @RestController
  2. @RequestMapping("/")
  3. @SpringBootApplication
  4. public class DemoApplication {
  5.  
  6. @GetMapping("")
  7. public String hello(){
  8. return "Hello JRebel";
  9. }
  10.  
  11. public static void main(String[] args) {
  12. SpringApplication.run(DemoApplication.class, args);
  13. }
  14.  
  15. }
 

訪問瀏覽器,輸出: Hello JRebel

修改hello()方法中的返回值,查看控制檯,發現JRebel重新加載了變更的類。

如果控制檯沒有變化,可能是IDEA沒有設置自動編譯,可以參考我上一篇博文(在IDEA中使用Spring-boot-devtools進行熱部署)進行設置IDEA自動編譯,也可以點擊Build->build project手動編譯。

 再次刷新瀏覽器,發現瀏覽器輸出內容已經改變:Hello JRebel.I'm Yvan

 5. 使用JRebel進行遠程調試

JRebel支持遠程調試以及遠程更新修改文件。

5.1 遠程服務器上安裝JRebel

我使用的服務器環境是Centos7

下載JRebel

 
  1. # 下載安裝包
  2. curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
  3. # 解壓下載文件
  4. unzip jrebel-stable-nosetup.zip
 

激活JRebel

可以通過指令激活,激活的指令爲:

 
  1. # 將自己的激活URL和郵箱地址替換下面的指令參數
  2. bash jrebel/bin/activate.sh  url email
 

爲JRebel設置密碼

爲了安全起見,防止其他人通過遠程連接到JRebel篡改程序,我們爲JRebel設置一個密碼。

比如我設置一個密碼爲12345678

java -jar jrebel/jrebel.jar -set-remote-password 12345678

 5.2 配置遠程同步

遠程同步是將本地修改的類文件更新到遠程服務器上。但是這個更新只是針對運行時的服務內存中的文件更新並非真正更新class文件,當服務重啓還是這些變更就會消失。

打包服務:

首先配置JRebel的遠程配置文件,這裏有一個坑,就是用上文說的自動生成的rebel-remote.xml路徑是錯誤的。我們需要將其拷貝到SpringBoot的resource目錄。

 然後再IDEA中執行MVN 的package打包,並將jar包上傳到遠程服務器。

生成啓動指令:

打開IDEA的Settings->JRebel & XRebel->JRebel Startup

JRebel已經爲各種不同的java服務提供了啓動參數實例,根據自己的情況選擇即可

這裏我使用的是Linux  SpringBoot2.x看到選擇完畢後下面提供了啓動示例,我們拷貝一下根據我們的實際情況修改一下。

 這裏有兩個地方需要修改,一個是-agentpath:就是剛剛在服務器上安裝的JRebel目錄,另外一個就是自己的jar包名稱

java "-agentpath:/root/www/jrebel/lib/libjrebel64.so" -Drebel.remoting_plugin=true -jar demo-0.0.1-SNAPSHOT.jar

 然後在遠程服務器上執行命令啓動服務,啓動成功,控制檯會輸出JRebel的信息

IDEA配置JRebel遠程服務

打開IDEA的Settings->JRebel & XRebel->JRebel Remote Servers

 

點擊Test Connection 測試是否可以正常連接

  測試同步功能

修改hello方法中的返回值,然後再IDEA的右上角點擊帶綠色火箭帶雲朵那個,進行同步

 點擊後,控制檯會輸出執行信息,成功後刷新瀏覽器,發現返回值發生變化。

 如果出現錯誤提示:

Warning: Cannot find a project with ID 'com.example.demo' on this remote server. Maybe it is not deployed, or project's ID in rebel-remote.xml is different on the server.

  請可能是rebel-remote.xml配置有問題,檢查一下這個文件是否放到了resouces目錄中

6. 遠程Debug

遠程Debug,首先要配置遠程服務,在IDEA又上角配置服務

Edit Configurations

 選擇Remote JVM Debug

按圖選擇即可,然後將生成的command參數拷貝出來加入到上文我們啓動服務的指令當中

 例如:

java "-agentpath:/root/www/jrebel/lib/libjrebel64.so" -Drebel.remoting_plugin=true -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar demo-0.0.1-SNAPSHOT.jar

然後重啓服務

 服務啓動成功後,我們點擊IDEA右上角剛剛配置的Remote服務,點擊debug圖標啓動。

沒有問題,然後在程序中加入斷點,刷新瀏覽器,查看斷點是否停留,如果停留說明配置成功。

 至此JRebel熱更新,遠程調試已經配置完畢。可以開心的進行遠程debug啦!

7.參考連接

1. 官方文檔:Learn - JRebel Documentation | JRebel & XRebel by Perforce

 

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