注:1.新增文件问题:如果删除了.java文件则jreble不会生效,jrebel自动加载编译的时间按有不确定性,所以最好推荐手动编译ctrl+shift+F9或ctrl+shift
2.application.yml文件,测试发现,在本地热更新中和远程部署中aoolication.yml文件可以实现热更新,但是也仅限于新增、修改,如果是删除配置,是不会生效的
1.激活流程
方法一:
- 安装JRebel插件后,注册地址填写激活网址 + 生成的GUID,邮箱随便填写,然后直接激活即可
激活网址列表,尽量用排序靠前的
http://jrebel-license.jiweichengzhu.com/{GUID}
https://jrebel.qekang.com/{GUID}
GUID可以使用在线GUID地址在线生成,然后替换{GUID}就行。
2.下面邮箱地址可随便输入。
3.选择我同意
4.提交
方法二:
1.前置步骤均一致,在填入Team URL时,填入以下内容
http://127.0.0.1:8888/{GUID}
GUID可以使用在线GUID地址在线生成,然后替换{GUID}就行。
2.下面邮箱地址可随便输入。
3.选择我同意
4.提交
报错解决
报错:如果报Unable to connect to license server.Check your network connnection and/or VPN settings.
解决: 1.下载机器系统对应工具 https://github.com/ilanyu/ReverseProxy/releases
2.打开后继续激活
2.热更新配置
热更新的核心在于:主要是通过监控编译后文件夹,所以所有的改动都要基于我们已经进行了编译,
核心文件:rebel.xml
1.开启自动编译
2.Shift+Ctrl+Alt+/,选择Registry
3.配置需要热部署的项目
4.如果上述情况都配置好但是还是没有生效,那么终极手段:删除项目中的.idea文件,清除idea缓存并重新加载项目
4.关于新增.java文件,但是jreable没有热加载
解决:当我们选择jrebel热加载模块之后会在项目中生成rebel.xml文件,文件中配置了监听项目编译后的文件夹,所以如果新增了.java文件,我们需要编译之后才能生效,快捷键:crtl + shift +F9
3.热部署
3.1服务器配置
1.下载jrebel安装包
curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
2. 解压下载文件
unzip jrebel-stable-nosetup.zip
解压后目录为:
3.为JRebel设置密码,这里设置的密码需要在后续远程连接中使用(重要)
java -jar jrebel/jrebel.jar -set-remote-password 12345678
4.启动应用程序
启动jar包,指向日志文件,2>&1 & 表示打开或指向同一个日志文件
nohup java "-agentpath:/data/jrebel/jrebel/lib/libjrebel64.so" -Drebel.remoting_plugin=true -jar jenkins_test.jar --spring.config.location=application.yml 2<&1 &
参数说明:
-Drebel.remoting_plugin=true 表示开启jrebel远程插件
"-agentpath:/data/jrebel/jrebel/lib/libjrebel64.so"是你解压的jrebel目录改为自己的目录
至此,服务器配置完成。
3.2IDEA配置
1.选择服务器系统运行
2.配置远程服务器连接到服务器的jrebel
3.勾选远程部署模块,第1个小图标表示本地哪些模块进行热更新,第2个小图标表示哪些模块可以远程热部署
3.点击开始远程热部署
注意:进行远程热部署的前提是我们在本地已经热更新完成,这里还是推荐手动来热部署,只要使用ctrl+shift+F9快捷键编译之后,会自动触发本地热更新和远程热部署
避坑!!!
报错:Cannot find a project with ID ‘com.jenkins.jenkins_test’ on this remote server. Maybe it is not deployed, or project’s ID in rebel-remote.xml is different on the server.
原因:远程服务器中没有发现id为xxx的远程服务,这里是因为我之前打包上传到服务器运行时,idea没有勾选开启远程部署,没有生成rebel-remote.xml文件,所有jar中也没有包含rebel-remote.xml文件,导致在远程服务器上找不到指定的id服务
解决:打包之前一定要开启远程部署生成rebel-remote.xml文件,并打包到jar包中运行
4.springboot自带热更新
4.1导入依赖
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
4.2 开启自动编译
4.3设置启动类策略,修改和切换页面都会重新启动
区别:devtools是监测到修改之后,完全重新启动,jreble是只会重新编译你修改的java文件,推荐jrebel
结论:不管是那种热更新,都不推荐在正式服务中使用,还是有很大不确定性和弊端,可以在开发环境使用,提高开发效率,而且如果是微服务部署,则会使用docker容器部署,那么jreble远程部署功能能否正常使用也是未知数。