人生苦短,我用JRebel
- 2022 年 3 月 19 日
- 筆記
昨天看到糰子推送的一篇關於熱部署的文章,其中介紹了自研的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後,根據首次安裝指引,進入激活步驟。這裡感謝薯條大佬搭建的激活伺服器,直接訪問//jrebel.qekang.com
,複製介面上展示的激活鏈接,填充到激活頁面,然後隨便填寫一個郵箱名即可完成激活。
3、啟動項目
之後用這個小綠火箭的圖標來啟動或者debug項目就可以啦。
好啦,這樣,摸魚的時間就又減少了。