JRebel 使用 JRebel 可以在修改代碼後,動態重新載入修改的代碼,免去了代碼工程全量重建、重啟的耗時流程,有效地提高開發者的效率。在 IDEA 的插件市場搜索 JRebel for IntelliJ 找到安裝即可。 JRebel for IntelliJ 版本:2019.1.4 1、啟用自 ...
JRebel
使用 JRebel 可以在修改代碼後,動態重新載入修改的代碼,免去了代碼工程全量重建、重啟的耗時流程,有效地提高開發者的效率。在 IDEA 的插件市場搜索 JRebel for IntelliJ 找到安裝即可。
JRebel for IntelliJ 版本:2019.1.4
1、啟用自動部署
此處勾選後,當用 JRebel 啟動應用時,會自動勾選 Build, Execution, Deployment -> Compiler -> Build project automatically,否則需要自己手動來選中 Build project automatically ,這個是自動構建工程的選項。
2、生成 rebel.xml 配置
這個配置文件是 JRebel 為當前項目生成的配置,預設生成指向 .../target/classes 路徑的 classpath。
3、運行配置
將下麵的兩個選項框換成 Update classes and resources ,表示會自動更新變更的類和資源。
4、運行/Debug
想要通過 JRebel 運行程式,下圖兩個分別是運行和Debug選型,通過他們來運行應用即可。
5、效果
代碼修改完後,滑鼠點擊 IDEA 視窗外的任意位置,便會觸發類重新載入,此時會列印如下的日誌,說明重新載入成功了。
JRebel VS Devtools
Devtools 的簡單使用
如果要使用 spring-boot-devtools ,則需要在 Maven 的 pom 文件增加如下依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
spring-boot-devtools 會在類路徑上的文件變更時,觸發自動重啟,而 JRebel 是觸發類重新載入,從如下 Devtools 重啟的日誌也能看出和 JRebel 的一些區別。
總結
雖然 JRebel 重新載入相比 Devtools 重新啟動可能是會更快一些,但是 Devtools 其實也並不慢,它使用了兩個類載入器,不會修改的類載入到 Base 類載入器,而正在開發中的類載入到 restart 類載入器。當應用重啟時,Devtools 會重啟 restart 類載入器,而 Base 類載入器不變,所以相比手工全量重啟應用,利用 Devtools 來重啟的速度也是很快的。
實際開發中,可以根據需求選擇使用 JRebel 還是 Devtools。