目录
1. 简介:
JRebel 是一款热部署工具。
使用 JRebel,您无需等待构建和重新部署来进行代码更改。只需编写代码并刷新您的浏览器。
开发人员可以在 Java 开发期间跳过重建和重新部署——同时保持应用程序状态。这使开发人员可以实时查看代码更改如何影响他们的应用程序。
2. JRebel VS Spring-boot-devtools
- 区别1:热重启VS热重载:
Srping-boot-devtools和JRebel最大的区别就是Srping-boot-devtools是热重启,而JRebel是热重载。简单来说Srping-boot-devtools每次变更类都会进行一次重启,而JRebel每次类发生变更只是将变更的类重新加载,因此在效率上JRebel会更快。
目录
2. JRebel VS Spring-boot-devtools
- 区别2:Srping-boot-devtools是免费使用的,JRebel是收费的
3. IDEA中安装JRebel
3.1 使用的工具版本:
- IDEA:2021.2.1
- JRebel:2022.1.1
3.2 安装JRebel:
在IDEA中,打开File->Settings->plugins 然后在Marketplace中搜索JRebel
选择安装JRebel and XRebel插件,重启IDEA生效。
3.2 激活JRebel:
由于JRebel是收费的,所以在使用的时候需要先进行激活操作。网络上很多激活教程,自行查找。
激活成功后这里会变成绿色
4.在项目中使用JRebel
4.1 打开JRebel窗口
这里有两个图标,下面对应出现复选框,它的作用是帮助程序生成JRebel的配置文件。
配置文件的作用:JRebel 监控您对类和资源所做的更改 - 并智能地将它们反映在您的应用程序中。JRebel 需要知道你的类和资源在哪里就是通过配置文件(rebel.xml)来查找。
两个图标的区别:
用于本地项目调试时生成的配置文件rebel.xml
用于远程服务调试而生成的配置文件rebel-remote.xml
4.2 启动项目测试
在IDEA右上角点击绿色火箭图标,第一个是表示正常启动服务,第二个表示Debug模式启动服务。
启动时控制台会输出JRebel信息
写一个SpringBootDemo:
@RestController
@RequestMapping("/")
@SpringBootApplication
public class DemoApplication {
@GetMapping("")
public String hello(){
return "Hello JRebel";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
访问浏览器,输出: Hello JRebel
修改hello()方法中的返回值,查看控制台,发现JRebel重新加载了变更的类。
如果控制台没有变化,可能是IDEA没有设置自动编译,可以参考我上一篇博文(在IDEA中使用Spring-boot-devtools进行热部署)进行设置IDEA自动编译,也可以点击Build->build project手动编译。
再次刷新浏览器,发现浏览器输出内容已经改变:Hello JRebel.I'm Yvan
5. 使用JRebel进行远程调试
JRebel支持远程调试以及远程更新修改文件。
5.1 远程服务器上安装JRebel
我使用的服务器环境是Centos7
下载JRebel
# 下载安装包
curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
# 解压下载文件
unzip jrebel-stable-nosetup.zip
激活JRebel
可以通过指令激活,激活的指令为:
# 将自己的激活URL和邮箱地址替换下面的指令参数
bash jrebel/bin/activate.sh url email
为JRebel设置密码
为了安全起见,防止其他人通过远程连接到JRebel篡改程序,我们为JRebel设置一个密码。
比如我设置一个密码为12345678
java -jar jrebel/jrebel.jar -set-remote-password 12345678
5.2 配置远程同步
远程同步是将本地修改的类文件更新到远程服务器上。但是这个更新只是针对运行时的服务内存中的文件更新并非真正更新class文件,当服务重启还是这些变更就会消失。
打包服务:
首先配置JRebel的远程配置文件,这里有一个坑,就是用上文说的自动生成的rebel-remote.xml路径是错误的。我们需要将其拷贝到SpringBoot的resource目录。
然后再IDEA中执行MVN 的package打包,并将jar包上传到远程服务器。
生成启动指令:
打开IDEA的Settings->JRebel & XRebel->JRebel Startup
JRebel已经为各种不同的java服务提供了启动参数实例,根据自己的情况选择即可
这里我使用的是Linux SpringBoot2.x看到选择完毕后下面提供了启动示例,我们拷贝一下根据我们的实际情况修改一下。
这里有两个地方需要修改,一个是-agentpath:就是刚刚在服务器上安装的JRebel目录,另外一个就是自己的jar包名称
java "-agentpath:/root/www/jrebel/lib/libjrebel64.so" -Drebel.remoting_plugin=true -jar demo-0.0.1-SNAPSHOT.jar
然后在远程服务器上执行命令启动服务,启动成功,控制台会输出JRebel的信息
IDEA配置JRebel远程服务
打开IDEA的Settings->JRebel & XRebel->JRebel Remote Servers
点击Test Connection 测试是否可以正常连接
测试同步功能
修改hello方法中的返回值,然后再IDEA的右上角点击带绿色火箭带云朵那个,进行同步
点击后,控制台会输出执行信息,成功后刷新浏览器,发现返回值发生变化。
如果出现错误提示:
Warning: Cannot find a project with ID 'com.example.demo' on this remote server. Maybe it is not deployed, or project's ID in rebel-remote.xml is different on the server.
请可能是rebel-remote.xml配置有问题,检查一下这个文件是否放到了resouces目录中
6. 远程Debug
远程Debug,首先要配置远程服务,在IDEA又上角配置服务
Edit Configurations
选择Remote JVM Debug
按图选择即可,然后将生成的command参数拷贝出来加入到上文我们启动服务的指令当中
例如:
java "-agentpath:/root/www/jrebel/lib/libjrebel64.so" -Drebel.remoting_plugin=true -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar demo-0.0.1-SNAPSHOT.jar
然后重启服务
服务启动成功后,我们点击IDEA右上角刚刚配置的Remote服务,点击debug图标启动。
没有问题,然后在程序中加入断点,刷新浏览器,查看断点是否停留,如果停留说明配置成功。
至此JRebel热更新,远程调试已经配置完毕。可以开心的进行远程debug啦!
7.参考连接
1. 官方文档:Learn - JRebel Documentation | JRebel & XRebel by Perforce