【JAVA】远程热部署在美团的落地实践,JRebel插件热部署
Java系列 | 远程热部署在美团的落地实践_美团技术团队的博客-CSDN博客_java美团项目
JRebel热部署的使用_闪闪Utaha的博客-CSDN博客_jrebel
IDEA集成JRebel实现热部署以及远程调试_Yvanzz的博客-CSDN博客_idea jrebel
JRebel Quick Start Guide for IntelliJ IDEA | JRebel & XRebel by Perforce
微服务开发神器之JRebel 插件破解和实现本地及远程热部署教程-阿里云开发者社区
JreBel&idea2020&springboot
JreBel:实现了不需要重启服务器达到热部署项目效果,它会对你当前所编辑过的页面进行编译,大幅度减少了重启服务器所带来的等待时间。
注意事项:
c盘下的用户名一定不能为中文名称,否则会一直提示路径错误,目前测试全部失败,以后的同学们安装可以试一试,如果成功了就留个言
1.0安装jrebel插件
File–》Settings—》plugins----》marketplace----》搜索jrebel
1.1安装成功后会重启idea,出现下面的图片
1.2配置jrebel插件
2.激活jrebel
2.1:先获取GUID
在线生成GUID地址 (https://www.guidgen.com/), PS:如果失效刷新GUID替换就可以!
输入url:https://jrebel.qekang.com/GUID(其中的GUID是2.1生成的,邮箱自己随意填写)
之前点击蓝色字体会出现这个窗口,将上面获取到的GUID根据图片提示输入进去
如果没有出现下面提示,请确定自己的网络通畅,然后再次点击激活,如果还不行,更改guid
- 继续点击我同意【I agree】
3、JRebel 配置
3、1 将工作模式改成离线工作,!!!!
不修改成离线工作,你的jrebel会一直报错,当然某些小伙伴的是没有问题
- 你的右上角会有两个绿色的小图标,这个就是jrebel启动
4、使用jreBel
4、1 进行项目热部署
- 左下角有一个JreBel,点击在打开的窗口,选择你所需要进行热部署的项目。
勾选后会生成一个rebel.xml文件,此文件可以忽略
4、3 更改后使用ctrl+f9实现不重启服务器部署项目
- 或者点击小锤子也是
4、4 录制快捷键
-
原有的保存操作不方便一只手操作,设置新的快捷键方便操作
-edit—>macros—>start macro recording -
右下角会出现一个提示
-
然后点击ctrl+F9,此时右下角会有提示,点击红色停止
-
会弹出一个窗口,在窗口中输入build
- 打开设置,找到kaymap
- 右击选择第一个,在弹出的窗口输入你想使用的快捷键,
ctrl+s
已经被使用,建议使用alt+z
或者alt+s
警告!!!
JreBel不适用于resources包下面的文件,修改此包下面的必须重启,否则不生效。
JRebel VS Spring-boot-devtools
- 区别1:热重启VS热重载:
Srping-boot-devtools和JRebel最大的区别就是Srping-boot-devtools是热重启,而JRebel是热重载。简单来说Srping-boot-devtools每次变更类都会进行一次重启,而JRebel每次类发生变更只是将变更的类重新加载,因此在效率上JRebel会更快。
这里有两个图标,下面对应出现复选框,它的作用是帮助程序生成JRebel的配置文件。
配置文件的作用:JRebel 监控您对类和资源所做的更改 - 并智能地将它们反映在您的应用程序中。JRebel 需要知道你的类和资源在哪里就是通过配置文件(rebel.xml)来查找。
两个图标的区别:
用于本地项目调试时生成的配置文件rebel.xml
用于远程服务调试而生成的配置文件rebel-remote.xml
4.2 启动项目测试
在IDEA右上角点击绿色火箭图标,第一个是表示正常启动服务,第二个表示Debug模式启动服务。
启动时控制台会输出JRebel信息
写一个SpringBootDemo:
-
-
-
-
public class DemoApplication {
-
-
-
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