昨天看到團子推送的一篇關于熱部署的文章,其中介紹了自研的Sonic插件在公司內部的應用,同時曬出來一張對比圖:

團子表示我們的插件要比同類插件優秀哦,不過我定睛一看,好家伙,第一列的JRebel在圖中的描述,除了遠程debug相關的功能,其他的基本和團子的插件不相上下啊!沒機會使用團子插件的朋友們,如果只是想提升本地開發效率,絕對要試一試JRebel啊!
為啥要用熱部署插件?
想到了年輕的時候,每次改動代碼之后,都要重新啟動專案,專案小倒是還好,大一些的專案,加載的東西多,要等上一兩分鐘,當時就想,如果可以改了代碼不重新啟動就好了,真是費勁,(真是年少無知,太熱愛作業,這重啟的時間摸魚,多是一件美事啊!)后來自己發現,如果只改方法中的幾行代碼,IDEA重新編譯后是可以直接生效的(也就是上圖中的IDEA熱加載),如果是增加個類,或者多寫個方法,還是得老老實實的重啟專案才行,
JRebel究竟有什么奇效?
IDEA啟動專案
我們寫個簡單的demo來看看JRebel的效果,
創建一個Spring的web專案,寫一個簡單的Controller,實作一個post請求:
@RestController
@Slf4j
public class TestJRebelController {
@PostMapping("/test/hello")
public String hello() {
return "你好,歡迎常來看看";
}
}
通過IDEA啟動專案,本地請求后,正常回傳

這時我們增加一個方法helloWorld``(),如下:
@RestController
@Slf4j
public class TestJRebelController {
@PostMapping("/test/hello")
public String hello() {
return "你好,歡迎常來看看";
}
@PostMapping("/test/helloworld")
public String helloWorld() {
return "你好,這個世界歡迎常來看看";
}
}
然后在選單欄選擇Build-->Recompile 'TestJRebelController.java',彈出的視窗點擊reload,這時左下角會提示新增方法的重新編譯對VM是無效的,需要重新啟動服務,當然,新的url請求自自然也是失效的,

JRebel啟動專案
現在我們安裝完JRebel,通過JRebel啟動只有hello``()方法的專案,之后我們再添加helloWorld``()這個方法,按照剛才的方式重新編譯,發現左下角提示“1 class reloaded”,

之后請求路徑localhost:8080/test/helloworld成功回傳,

鵝妹子嚶~完全是實時生效啊!
再試試新增一個類:
@RestController
@Slf4j
public class TestController {
@PostMapping("/test2/helloworld")
public String hello() {
return "你好,第二個世界歡迎常來看看";
}
}
這次我沒有重新編譯,直接請求localhost:8080/test2/helloworld,發現直接回傳了資訊,

為啥呢?原來是因為我的IDEA在這里配置了自動編譯:

所以當你的代碼有變化時,JRebel會自動重新加載最新的代碼,所以不用你手動重新編譯,就會實時生效啦,同時控制臺會輸出以下的資訊:
2022-03-19 10:18:19 JRebel: Reloading class 'com.example.littleweb.controller.TestController'.
安裝JRebel
安裝插件的程序很簡單,
1、IDEA插件市場搜索并安裝

2、激活
重啟IDEA后,根據首次安裝指引,進入激活步驟,這里感謝薯條大佬搭建的激活服務器,直接訪問https://jrebel.qekang.com,復制界面上展示的激活鏈接,填充到激活頁面,然后隨便填寫一個郵箱名即可完成激活,


3、啟動專案
之后用這個小綠火箭的圖示來啟動或者debug專案就可以啦,

好啦,這樣,摸魚的時間就又減少了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445563.html
標籤:Java
下一篇:Java基礎——內部類
