利用JRebel进行远程热部署调试

一、背景

我的工作中有些页面调试十分麻烦,例如一个支付页面,调试遇到的难点就有:
1、工程依赖了Apollo,如果要本地调试,需要本地添加Apollo的相关Java参数。
2、进入到支付页面前需要对用户做OAUTH,有个回调地址需要在微信端配置,但是只能配一个地址。如果本地要能正常跑起来,需要在Nginx配一些代理。
3、由于需要做OAuth的原因,这个页面无法在浏览器通过F12进行调试。只能改完重新启动应用后,手机扫码再看效果。
由于问题1、2的原因,本地调试基本是无望的,只能寄希望于远程调试。但是远程调试需要反复的拖包,重启,然后手机扫码看效果。我曾被这个支付页面调试折磨了很久,直到我遇见了JRebel。

二、JRebel

JRebel是一款JAVA虚拟机插件,利用它,我们就可以在不进行重部署的情况下让代码的改变生效。这里代码包括JAVA代码和xml、jsp等资源文件。当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署好的应用程序上,从而跳过了构建和部署的过程。
可以看到,JRebel刚好解决了我的痛点。

三、安装

1、 IDEA安装JRebel插件

1-打开IDEA–>Settings,然后搜索Plugins,在下方点击Browser Repositories,在弹出来的窗口搜索JRebel,然后安装,如下所示:
利用JRebel进行远程热部署调试_第1张图片
如果下不下来,可以进行离线安装,去官网JRebel插件下载离线插件包,如下所示:
利用JRebel进行远程热部署调试_第2张图片
离线包下载要快一点。下载完成后,继续点击打开IDEA–>Settings,然后搜索Plugins,选择install from disk,安装后重启即可。

激活JRebel

因为JRebel是收费软件,所以需要激活它。好在网上有激活的反向代理软件,下载地址:https://github.com/ilanyu/ReverseProxy/releases/tag/v1.4。window环境下下载红框里的即可:
利用JRebel进行远程热部署调试_第3张图片
下载完成后,双击打开,license sever就启动了。然后继续Settings–>JRebel,点击Change lisense,如下所示:
利用JRebel进行远程热部署调试_第4张图片
在弹出来的窗口中选择I already have a license,填写好license server地址和用户邮箱,点击Change License即可。需要注意的是license server地址是:http://127.0.0.1:8888/uuid的形式,如下所示:
利用JRebel进行远程热部署调试_第5张图片
这样IDEA端的JRebel就安装完成了。

2-服务端安装

如果需要远程的应用能够及时更新代码,需要通过JRebel的Agent启动应用。服务端如何处理,可以通过IDEA–>Settings–>JRebel–>start up查看,如下所示:
利用JRebel进行远程热部署调试_第6张图片
上面列举出了在不同的环境下调试的步骤。我的服务器环境是linux 64位,应用是spring-boot2应用,需要远程热部署调试。因此根据上面的提示,需要做两个事情:

1-服务器上安装JRebel Agent文件

找到我们插件安装的位置,我的电脑是如下位置:
利用JRebel进行远程热部署调试_第7张图片
拷贝jrebel6文件夹,然后放置在服务器上面,如下所示:
在这里插入图片描述

2-脚本添加启动参数

JRebel Agent文件安装好后,我们在应用启动脚本里的DEBUG参数添加上面给出的参数:

if [ 'x'$DEBUG_PORT != 'x' ]; then
        DEBUG_OPTION="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=$DEBUG_PORT,suspend=n -agentpath:/home/xxx/server/bin/jrebel/jrebel6/lib/libjrebel64.so -Drebel.remoting_plugin=true"
fi

其中

-agentpath:/home/xxx/server/bin/jrebel/jrebel6/lib/libjrebel64.so -Drebel.remoting_plugin=true

就是此次新增的参数,这样应用启动就会通过JRebel 的Agent启动了。

四、热部署操作步骤

JRebel的安装工作做完了,接下来就开始进行热部署操作了。
首先,我们需要更改两个配置:
1-IDEA设置compile勾选自动编译。如下所示:
利用JRebel进行远程热部署调试_第8张图片
2-ctrl+shift+A 或者 help->find action…打开,然后搜索registry。找到 compiler.automake.allow.when.app.running 并勾上。如下所示:
利用JRebel进行远程热部署调试_第9张图片
然后我们新增remote server,如下所示:
利用JRebel进行远程热部署调试_第10张图片
Server Name是我们的工程名称,Server Url是应用启动后的访问地址,记住不是Debug端口。填好后,点击Test Connection,如果连上了就表示没问题了。
最后IDEA JRebel窗口勾选需要热部署的工程,此时会生成两个xml文件。服务端就是根据这个文件来判断是哪个工程需要热部署。如下所示:
利用JRebel进行远程热部署调试_第11张图片
如果有多个Remote Server,可以点击左边的铅笔按钮,然后选择使用哪个Remote Server。
这样,我们热部署就操作完了。重新打个包(保证生成的xml文件在包里面),部署上去,之后就可以进行热部署联调了。
当我们更新jsp文件后,点击同步按钮,就可以看到是否同步成功了,如下所示:
利用JRebel进行远程热部署调试_第12张图片
然后开始愉快的调试吧!调试的时候,偶尔点击同步会没有反应,请检查下jrebel是否已经激活了,然后再重启下IDEA,一般就可以了。

五、参考文档

1、Enable JRebel remote server support on the server
2、Intellij热部署插件JRebel
3、JRebel远程热部署springboot教程(我们的情况下,服务端不需要安装独立版JRebel)

说明:

这篇文章仅仅讲解如何进行远程热部署调试,重在热部署。如果是本地调式代码、或者远程调试,而不需要更新代码的,可以直接使用IDEA自带的调试或者远程调试功能,不需要费力使用JRebel。

你可能感兴趣的:(工作问题及解决方案)