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。