jreble实现热更新和热部署

注:1.新增文件问题:如果删除了.java文件则jreble不会生效,jrebel自动加载编译的时间按有不确定性,所以最好推荐手动编译ctrl+shift+F9或ctrl+shift
2.application.yml文件,测试发现,在本地热更新中和远程部署中aoolication.yml文件可以实现热更新,但是也仅限于新增、修改,如果是删除配置,是不会生效的

1.激活流程

方法一:

  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.打开后继续激活
image.png

2.热更新配置

热更新的核心在于:主要是通过监控编译后文件夹,所以所有的改动都要基于我们已经进行了编译,
核心文件:rebel.xml
1.开启自动编译
image.png
2.Shift+Ctrl+Alt+/,选择Registry
image.png
3.配置需要热部署的项目
image.png
4.如果上述情况都配置好但是还是没有生效,那么终极手段:删除项目中的.idea文件,清除idea缓存并重新加载项目
image.png
4.关于新增.java文件,但是jreable没有热加载
解决:当我们选择jrebel热加载模块之后会在项目中生成rebel.xml文件,文件中配置了监听项目编译后的文件夹,所以如果新增了.java文件,我们需要编译之后才能生效,快捷键:crtl + shift +F9
image.png

3.热部署

3.1服务器配置

1.下载jrebel安装包
curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
2. 解压下载文件
unzip jrebel-stable-nosetup.zip
解压后目录为:
image.png
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目录改为自己的目录
image.png
至此,服务器配置完成。

3.2IDEA配置

1.选择服务器系统运行
image.png
2.配置远程服务器连接到服务器的jrebel
image.png
3.勾选远程部署模块,第1个小图标表示本地哪些模块进行热更新,第2个小图标表示哪些模块可以远程热部署
image.png
3.点击开始远程热部署
image.png
注意:进行远程热部署的前提是我们在本地已经热更新完成,这里还是推荐手动来热部署,只要使用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 开启自动编译

image.png

4.3设置启动类策略,修改和切换页面都会重新启动

image.png
区别:devtools是监测到修改之后,完全重新启动,jreble是只会重新编译你修改的java文件,推荐jrebel
结论:不管是那种热更新,都不推荐在正式服务中使用,还是有很大不确定性和弊端,可以在开发环境使用,提高开发效率,而且如果是微服务部署,则会使用docker容器部署,那么jreble远程部署功能能否正常使用也是未知数。

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值