Docker版本CentOS 7.6 Docker CE 19.03.9 | IntelliJ IDEA版本 2023.1.3 (Ultimate Edition)
一、JRebel本地热部署
1、安装插件
1.1插件市场搜jrebel,安装即可,无需重启IDEA
1.2离线安装JRebel and XRebel,适合内网开发的小伙伴
2、激活
因为我有云服务器,所以自己在服务器上搞了个反向代理服务,很简单按照作者lanyu大神分享撸了个反代工具, 可用于激活JRebel的博客里,直接用Docker来安装。(没有云服务器的,要么在本地搭建反向代理服务,要么就借用别人的服务)
docker pull ilanyu/golang-reverseproxy
#记得在服务器防火墙页面中开放7055端口
docker run -d -p 7055:8888 ilanyu/golang-reverseproxy
激活页面(邮箱随便填)
激活后(不成功重新生成guid再次尝试),会自动配置JRebel的工程,跟随提示即可
查看是否已显示激活,激活后显示 valid,图标为绿色。此时可以点击 Work offline 实现离线的验证,离线下有效期为半年时间,半年后可以重新认证即可。若是 online 则实时会往服务端进行匹配验证。推荐使用 Work offline 方式!
查看是否配置完整,安装好后,默认会出现JRebel & XRebel的选项
设置自动编译,由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效
有的教程会让你设置compiler.automake.allow.when.app.running,不知道是因为我的IDEA是最新版本还是什么原因,没找到
配置完成后,找到应用启动类,选择Rebel Debug
此时可以修改或者增加代码,通过 Ctrl + Shift + F9 即可实现重新编译热部署。此时再也不需要每增加一个函数体、类都需要进行重启的操作,大大提升了 SpringBoot 开发调试的效率。
二、JRebel远程热部署
配置远程热部署服务,主要步骤如下:
- 在服务器安装 JRebel
- 配置本地 JRebel
- 在服务器用 JRebel 启动
- 本地新增远端服务器进行热部署
- 测试远程热部署是否成功
1.配置服务器 JRebel
1.1由于SpringBoot应用都是部署在Docker里,所以先在宿主机上下载jrebel安装包,到时候启动容器时再挂载到容器里
curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
#解压得到 jrebel 文件夹
unzip jrebel-stable-nosetup.zip
1.2设置密码(进入到 jrebel 目录)(这一步先不着急做,等jrebel文件夹挂载到容器里再做)
java -jar jrebel.jar -set-remote-password <password>
# 例如,设置密码为 123456
java -jar jrebel.jar -set-remote-password 123456
1.3激活服务端(进入到 jrebel/bin 目录,执行脚本) 在激活服务端中,JRebel 也提供了 3 种激活方式: Command line activation examples
在这里我们通过 With license server URL as an argument 方式,具体脚本如下
./activate.sh http://43.142.158.6:7055/bc1fdd38-9be0-4251-a619-e14a4a6c21b9 developer@wedev.tech
看到successfully activated,就代表已成功激活
2.配置本地 JRebel
2.1激活成功后,配置Dockerfile,复制下面这段命令到Dockerfile的ENTRYPOINT参数里,agentpath填容器里的路径,而不是宿主机的 (参考Dockerfile配置示例)
Dockerfile配置示例:
FROM java:8
MAINTAINER wecom
VOLUME /tmp
COPY wecom-0.0.1.RELEASE.jar wecom-1.0.0.jar
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone
EXPOSE 9081
EXPOSE 9000
ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9000","-agentpath:/usr/local/src/jrebel/lib/libjrebel64.so", "-Drebel.remoting_plugin=true","-jar","wecom-1.0.0.jar"]
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9000 配置远程调试,不需要可以删掉。如何远程调试看这里IDEA远程调试云服务器Docker中SpringBoot项目应用
ENTRYPOINT ["java","-agentpath:/usr/local/src/jrebel/lib/libjrebel64.so", "-Drebel.remoting_plugin=true","-jar","wecom-1.0.0.jar"]
小插曲:配置完Dockerfile后,打包生成镜像时报错:Could not acquire image ID or digest following build,找了一圈解决办法发现其实是Dockerfile里格式错误。。。(参考:build failed: Could not acquire image ID or digest following build)
2.2JRebel Panel 窗口,将需要热部署的项目打包,生成 rebel.xml 和 rebel-remote.xml
2.3挂载jrebel文件到docker容器里(此时挂载进去的jrebel文件无需激活,因为之前已经激活过了)
启动配置Create Container Cofiguration配置Run options
-v /root/jrebel:/usr/local/src/jrebel
3.在服务器用 JRebel 启动
启动容器后,容器内的应用启动日志
进入容器:
docker exec -it {Container ID} bash
可以看到挂载成功了
2.3设置密码(如果你忘记了密码可以重新执行这条命令,然后重启容器docker restart Container ID)
cd usr/local/src/jrebel
java -jar jrebel.jar -set-remote-password 123456
#提示SUCCESS,代表设置成功
SUCCESS: Remote server password set to '123456'
4.本地新增远端服务器进行热部署
点击 Test Connection,点击 OK 确认
5.此时即可点击右上角 “远程热部署” 按钮后,通过 Ctrl + Shift + F9 即可实现重新编译热远程部署
测试代码是否部署,访问是否正常
ps: 可以先远程热部署后,再点击远程调试 Debug,即可实现先热部署再调试,大大加快开发效率。
至此,所有的配置过程都结束了!即可开始尽情享受,JRebel 远程热部署和远程调试~ 实现真正的热部署,无论是改了代码片段还是配置文件,都可以做到不用重新启动就生效!(完)
参考文章:微服务开发神器--JRebel 插件破解和实现本地/远程热部署教程(IntelliJ IDEA版)
注意:本文归作者所有,未经作者允许,不得转载