热部署(Hot Deployment)是指在应用程序运行的过程中,无需停止整个应用或重启服务器,就能够实时地将新的代码、资源或配置文件等变更应用到运行中的系统中。这使得开发人员能够更加高效地进行代码修改、调试和测试,而无需每次都重新启动整个应用。
目前常见的热部署方式有两种:
- Devtools
- JRebel
Devtools
属于SpringBoot推出的产品,因此需要在SpringBoot环境下使用,配置简单便捷,而且是免费使用的
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
- IDEA 配置,开启自动编译
快捷键:ctrl + shift + alt + /
进入 Registry 配置:
IDEA 2022 以后版本的 Registry 没有compiler.automake.allow.when.app.running
的配置,在Setting中配置,如下:
- 重启 IDEA
只要 classpath 路径下发生变化,项目就会自动重启
注意:classpath 路径下的静态资源或者视图模板等发生变化时,并不会导致项目重启。
提示:
若代码修改后没有自动重新编译,也可手动操作:
JRebel
在高版本的JRebel中,已经需要激活了(收费),但是还是有使用方法的,跟着步骤操作即可
- 安装 IDEA 插件
安装成功后,就能在设置中看到相应的配置信息:
激活页面:
- 激活
首先到github上去下载一个反向代理的软件,根据自己电脑下载即可:
下载之后打开运行(激活完成前不要关闭)
打开 JRebel 激活页面:
第一行:输入http://127.0.0.1:8888/{GUID}
UID 在线生成网站:https://www.iamwawa.cn/guid.html
第二行邮箱随意输入即可(符合邮箱格式)
激活成功:
最后,设置 JRebel 为离线模式即可:
此时就可以关掉 GitHub 下载的反向代理软件了
- 使用
配置需要热部署的项目模块:
启动/Debug 使用 JRebel 方式:
启动日志中也能看到 JRebel:
同样的,当代码修改时点击上方小?按钮或者使用快捷键Ctrl + F9
重新编译即可
对于 IDEA 自动编译的 Settings,JRebel 和 SpringBoot Devtools 同理
总结
在了解完两种热部署方式后,接下来看看 GPT 对二者的对比
Spring Boot DevTools和JRebel都是用于实现热部署的工具,但它们有一些关键的区别。以下是两者之间的对比:
适用范围:
- Spring Boot DevTools: 主要针对Spring Boot应用,提供了一套开发时工具,支持热部署Spring组件、静态资源和模板引擎等。
- JRebel: 更通用,不仅支持Java EE和Spring应用,还支持其他框架和技术,包括Struts、Hibernate、JSF、EJB等。
支持的修改类型:
- Spring Boot DevTools: 主要支持类热部署,可以实时更新Java类的修改,也可以更新静态资源、模板文件等。
- JRebel: 提供更广泛的支持,包括类、资源文件、XML配置、Spring配置、Struts配置等多种修改类型。
配置和集成:
- Spring Boot DevTools: 集成在Spring Boot应用中,无需额外的配置,只需将相关依赖添加到项目中即可。它通过使用两个类加载器(BaseClassLoader和RestartClassLoader)来实现类热部署。
- JRebel: 需要在应用中添加JRebel的代理(agent)并配置相应的许可证信息。需要一些额外的配置,但提供了更灵活的定制选项。
性能开销:
- Spring Boot DevTools: 在开发环境中会有一些性能开销,因为它使用两个类加载器,其中一个用于加载不会改变的类,另一个用于加载可能发生变化的类。
- JRebel: 通常比Spring Boot DevTools更轻量,由于其高度优化的类加载器,可以在几乎零开销的情况下实现热部署。
商业/开源:
- Spring Boot DevTools: 是Spring Boot项目的一部分,采用Apache License 2.0开源许可。
- JRebel: 是一款商业工具,提供免费试用版本,但需要购买许可证以在生产环境中使用。
综合考虑,选择使用哪种热部署方式取决于具体的需求和项目环境。Spring Boot DevTools是一个轻量级的解决方案,适用于Spring Boot应用,而JRebel则提供了更广泛的支持和更高的性能,但需要付费许可证。