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。