在使用IDEA开发Java过程中,频繁的重启应用浪费时间非常低效。本文使用JRebel提供了热部署解决方案,使得代码更改可以即时生效,无需重启应用程序。
什么是JRebel?
JRebel是一个商业化的Java开发工具,旨在通过即时重新加载代码和配置来加速开发过程。它支持多种Java框架和应用服务器,包括Spring、Hibernate、Tomcat等。JRebel的主要优势在于它可以在不重启JVM的情况下重新加载类和资源文件的更改,从而极大地提高了开发效率。
为什么选择JRebel?
即时重新加载:无需重启JVM,代码更改即时生效。
支持复杂代码更改:支持添加新类、方法、字段等复杂的代码更改。
广泛的框架支持:支持多种Java框架和应用服务器。
提高开发效率:减少项目和重启时间。
方案对比
HotSwap
这个是JVM自带的一项功能,允许在调试模式下替换类的实现。以下是HotSwap的一些关键特性:
基本的代码更改:HotSwap主要支持方法体内的代码更改,不支持添加或删除方法、字段和类。
调试模式:HotSwap通常在调试模式下使用,开发者可以在IDE中设置断点并进行代码更改。
有限的框架支持:HotSwap不依赖于特定的框架,但其功能有限,无法处理复杂的代码更改。
SpringBootDevTools
他是我们用SpringBoot开发常用的工具,提供了一些有助于提升开发效率的功能,但它的自动重启机制与JRebel的即时重新加载机制有本质上的不同:
自动重启:当类路径上的文件发生更改时,SpringBootDevTools会自动重启应用程序。这比手动重启要快,但仍然需要重启JVM。
LiveReload:当资源文件(如HTML、CSS、JS)发生更改时,浏览器会自动刷新页面。
全局设置:DevTools允许在
application.properties
或application.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
目录
授权
cd /home/jrebel && chmod 755 ./ReverseProxy_linux_amd64
启动服务
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通过即时重新加载代码和配置文件,从而提高开发的效率。