在使用IDEA开发Java过程中,频繁的重启应用浪费时间非常低效。本文使用JRebel提供了热部署解决方案,使得代码更改可以即时生效,无需重启应用程序。

什么是JRebel?

JRebel是一个商业化的Java开发工具,旨在通过即时重新加载代码和配置来加速开发过程。它支持多种Java框架和应用服务器,包括Spring、Hibernate、Tomcat等。JRebel的主要优势在于它可以在不重启JVM的情况下重新加载类和资源文件的更改,从而极大地提高了开发效率。

为什么选择JRebel?

  1. 即时重新加载:无需重启JVM,代码更改即时生效。

  2. 支持复杂代码更改:支持添加新类、方法、字段等复杂的代码更改。

  3. 广泛的框架支持:支持多种Java框架和应用服务器。

  4. 提高开发效率:减少项目和重启时间。

方案对比

HotSwap

这个是JVM自带的一项功能,允许在调试模式下替换类的实现。以下是HotSwap的一些关键特性:

  1. 基本的代码更改:HotSwap主要支持方法体内的代码更改,不支持添加或删除方法、字段和类。

  2. 调试模式:HotSwap通常在调试模式下使用,开发者可以在IDE中设置断点并进行代码更改。

  3. 有限的框架支持:HotSwap不依赖于特定的框架,但其功能有限,无法处理复杂的代码更改。

SpringBootDevTools

他是我们用SpringBoot开发常用的工具,提供了一些有助于提升开发效率的功能,但它的自动重启机制与JRebel的即时重新加载机制有本质上的不同:

  1. 自动重启:当类路径上的文件发生更改时,SpringBootDevTools会自动重启应用程序。这比手动重启要快,但仍然需要重启JVM。

  2. LiveReload:当资源文件(如HTML、CSS、JS)发生更改时,浏览器会自动刷新页面。

  3. 全局设置:DevTools允许在application.propertiesapplication.yml中配置一些全局属性,如禁用缓存、启用调试日志等。

JRebel通过即时重新加载代码和配置文件,极大地提高了Java开发的效率。无论是简单的代码更改,还是复杂的类结构调整,JRebel都能轻松应对。相比之下,HotSwap和Spring Boot DevTools在功能上有所局限,但在特定场景下仍然是有用的工具。

搭建服务

地址:ReverseProxy

下载最新的1.4版本

本地运行

ReverseProxy_windows_amd64.exe 直接在本地双击运行就可以了,默认端口是8888

2024/11/29 19:59:49 Listening on 0.0.0.0:8888, forwarding to http://idea.lanyus.com:80

服务器部署

下载ReverseProxy_linux_amd64到服务器,演示地址为/home/jrebel 目录

  1. 授权 cd /home/jrebel && chmod 755 ./ReverseProxy_linux_amd64

  2. 启动服务 nohup ./ReverseProxy_linux_amd64 -l "0.0.0.0:8888" > /home/logs/rp.log 2>&1 &

  • 这里nohup是为了让关闭SSH连接还能在后台运行

  • /home/logs/rp.log 指定了日志持久化的位置,方便我们用面板的定时任务去清理

再查看下8888端口情况

这里已经成功了,在面板看看有没有服务的进程

设置定期清理rp.log

到这一步已经可以远程激活了,优雅点可以配置域名(自建了一个jrebel.dev77.cn),然后反代,这里就跳过了,用IP进行激活也是可以的。

IDEA配置使用

JRebel的基本配置以及日志默认是放在C盘的{user.home}\.jrebel,不多说上官方文档,

我们优雅点直接一把梭,放到D:\envs\to\jrebel ,需要我们在idea64.exe.vmoptions 中配置

PS:如果是激活码,vbs的IDEA,需要去Custom VM Option中看下有没有生效

接下来下载JRebel and XRebel插件(需要重启)

设置里面激活使用

  • url是我们激活地址+UUID

  • 邮箱随便填写

激活成功之后可以设置离线使用,个人喜欢时间30s,小锤子手动编译,同事最好去关闭hotswap。

启动项目,可以看到热部署生效,如果是多模块可以在左侧热部署图标勾选即可

总结

总之三种都是不错的热部署的方式,只不过在企业里项目通常都是多模块,项目文件也是比较大的,这时候可以相较于其他两种方式,很明显通过JRebel通过即时重新加载代码和配置文件,从而提高开发的效率。