热部署(Hot Deployment)是指在应用程序运行的过程中,无需停止整个应用或重启服务器,就能够实时地将新的代码、资源或配置文件等变更应用到运行中的系统中。这使得开发人员能够更加高效地进行代码修改、调试和测试,而无需每次都重新启动整个应用。

目前常见的热部署方式有两种:

  1. Devtools
  2. JRebel

Devtools

属于SpringBoot推出的产品,因此需要在SpringBoot环境下使用,配置简单便捷,而且是免费使用的
  1. 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
  1. IDEA 配置,开启自动编译

快捷键:ctrl + shift + alt + /进入 Registry 配置:

image-lymp.png

IDEA 2022 以后版本的 Registry 没有compiler.automake.allow.when.app.running 的配置,在Setting中配置,如下:
  1. 重启 IDEA
只要 classpath 路径下发生变化,项目就会自动重启
注意:classpath 路径下的静态资源或者视图模板等发生变化时,并不会导致项目重启。

提示:
若代码修改后没有自动重新编译,也可手动操作:

JRebel

在高版本的JRebel中,已经需要激活了(收费),但是还是有使用方法的,跟着步骤操作即可
  1. 安装 IDEA 插件

安装成功后,就能在设置中看到相应的配置信息:

image-jywe.png

激活页面:

  1. 激活

首先到github上去下载一个反向代理的软件,根据自己电脑下载即可:

下载之后打开运行(激活完成前不要关闭)

打开 JRebel 激活页面:

第一行:输入http://127.0.0.1:8888/{GUID}
UID 在线生成网站:https://www.iamwawa.cn/guid.html
第二行邮箱随意输入即可(符合邮箱格式)

激活成功:

最后,设置 JRebel 为离线模式即可:

此时就可以关掉 GitHub 下载的反向代理软件了
  1. 使用

配置需要热部署的项目模块:

image-eqpq.png

启动/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则提供了更广泛的支持和更高的性能,但需要付费许可证。

END
本文作者: 文章标题:Java项目常用的两种热部署方式
本文地址:https://www.jiusi.cc/archives/265/
版权说明:若无注明,本文皆九思のJava之路原创,转载请保留文章出处。
最后修改:2024 年 02 月 23 日
如果觉得我的文章对你有用,请随意赞赏