-
基于 SpringBoot & IDEA & JRebel 玩转近程热部署与近程调试
前言
在 SpringBoot 开发过程中,当咱们在 Debug 咱们的工程时,轻易批改一段代码逻辑、批改接口路由、新增一个工具类等等状况下,都须要咱们重新启动工程。重复的批改逻辑,重复的重启,这是相当苦楚的过程。当工程越来越大的时候,效率将变得特地低下,大部分的工夫就是在一直的重启我的项目、编译包、部署包。
近期在钻研基于 SpringBoot + IDEA 近程调试性能,能够通过 remote-debug 形式对测试环境中的 JVM 中的代码进行调试。所谓的近程调试就是,在本地代码能够调试服务器上的代码,模仿实在环境的申请(前提是本地的代码必须和近程服务器运行的代码统一)。在这种调试环境下,只能批改大量根本的业务代码,例如新增一个函数则都无奈失效。
这里强力举荐 JRebel 插件,JRebel 是一款热部署插件。当我的项目在 Debug 的时候,批改某一个 Java 文件时,JRebel 就能够解决在我的项目运行状态 debug 状态下任意批改 Java 文件并动静反馈到运行的我的项目中。JRebel 有两个十分酷的个性,(一)反对热部署,(二)反对近程热部署。
查阅大量材料,总算对配置十分清晰,决定具体整顿以供备忘,也零碎能够帮忙小白更快的实现近程部署与近程调试!
配置环境阐明
这里以我的配置环境为例,进行
- 框架:SpringBoot 2.1.6
- 工具:IntelliJ IDEA 2019.1.3 x64
- 服务器:CentOS Linux release 7.6.1810
- JDK:Java 1.8
-
JRebel
- 官网:JRebel, XRebel & QRebel By ZeroTurnaround | JRebel.com
- 文档:JRebel — JRebel 2019.x documentation
一、近程调试配置
1. 右上角点击,Edit Configurations,点击 + 号,创立 Remote 利用
2. 填写近程服务器信息
- Name:利用名
- Host:服务器地址
- Port:5005
3. 复制 Command line arguments for remote JVM 下的命令
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
阐明:自此,曾经取得了 启动近程服务的参数,命令将在启动的时候来应用
4. 启动服务
咱们晓得 SpringBoot 通过 Maven 打包后会生成 jar 包,服务端咱们通过 jar -jar 的形式启动。通过上一步咱们取得了服务端启动的配置参数命令,咱们能够执行一下命令启动我的服务。
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 webapp.jar
咱们能够用如下命令进行验证是否监听胜利
### 5. 近程调试
抉择咱们配置的近程调试项,点击 Debug 即可进行近程调试。
启动实现,对须要 Debug 的代码打上断点,剩下的操作步骤就是拜访近程服务器对应的业务申请,本地就会同步 Debug。
😎 自此,能够纵情的开始近程调试工作了!
然而在应用近程调试的过程中,如果进行了断点,会呈现服务阻塞的状况。如何解决这样的问题,将在上面进行形容。
## 二、热部署
这里将引入 JRebel 插件,能够实现对本地的服务和近程的服务进行热部署。本节将次要针对本地热部署进行配置。
### 1. IDEA 中装置 Jrebel 插件
File -> Settings -> Plugins -> Search plugins in marketplace
搜寻 JRebel for IntelliJ
装置即可,离线安装包下载地址:JRebel for IntelliJ – Plugins | JetBrains
装置实现后,重启 IDEA 失效。此时在 Settings 面板中会呈现 JRebel 的选项卡
### 2. 激活 JRebel 插件
####(一)官网 Active Code 形式激活(只可应用 10 天)
- 进入官网 Evaluate JRebel,填写残缺信息
- 点击 Register 获取激活码
此时即可获取你的激活码,复制保留到本地,后续将会用到。
- JRebel 插件激活
点击 help -> JRebel -> Activaction -> Activation code,将咱们网页上获取到的 Activation code
粘贴后,点击 Activate JRebel
即可激活。
激活胜利后在 JRebel 配置面板中,会显示 VALID 标记,即阐明激活胜利了。
此时,你曾经获取到了试用版的 JRebel 的应用权限,即可实现本地热部署的性能,能够进行第 3 步配置。(其余激活形式请参考:Activation — JRebel 2019.x documentation,若想要永恒破解,请往下浏览。)
####(二)永恒谐和形式
自己用户正版软件,举荐尽可能应用正版,如果想要 cracked(谐和)能够参考以下配置阐明
在这里咱们将通过 JRebel 的 Team URL(connect to online licensing service) 形式进行谐和(cracked)。
- 因为网络稳定性思考,这里咱们将搭建本人的 license server for JRebel
具体的搭建过程能够参考 Gitee 上的这位作者的仓库配置阐明:JrebelLicenseServerforJava: A license server for Jrebel。当然同时,这里我也将提供一个打包实现的 jar 包,间接上传至服务器运行即可。
JrebelBrainsLicenseServerforJava-1.0-SNAPSHOT-jar-with-dependencies
# 服务启动(阻塞)java -jar JrebelBrainsLicenseServerforJava-1.0-SNAPSHOT-jar-with-dependencies.jar -port 8081# 服务启动(后盾),举荐应用这种形式 nohup java -jar JrebelBrainsLicenseServerforJava-1.0-SNAPSHOT-jar-with-dependencies.jar -port 8081 &
浏览器中关上链接 http://192.168.72.131:8081,呈现如下界面则服务端配置胜利。
如果是团队合作举荐搭建在一台外部都可能拜访的服务器。
这里我应用的 JRebel 是 JRebel for IntelliJ v2019.1.4
版本的,咱们能够通过如下 URL 进行注册
http://host:8081/{guid}
,其中 GUID 能够通过在线工具本人生成一个,用于辨别不同的用户,而 GUID 基本上是不会呈现反复的状况。生成 GUID – 程序员在线工具- 在此处,我能够通过
http://192.168.72.131:8081/bc1fdd38-9be0-4251-a619-e14a4a6c21b9
和任意一个邮箱
进行谐和(这里咱们先筹备好这两个参数即可)
- 在 Team URL 中填入以上两个参数,即可实现激活
在 file->settings->plugins->JRebel 中查看是否已显示激活,激活后显示 valid,图标为绿色。此时能够点击 Work offline 实现离线的验证,离线下有效期为半年工夫,半年后能够从新认证即可。若是 online 则实时会往服务端进行匹配验证。举荐应用 Work offline 形式!
- 补充:这里咱们次要应用本人搭建 Server 的形式进行验证,这里也提供一些网上第三方的服务平台。在网络可达的状况下,免去搭建的懊恼。
- beer_tools for jrebel
在谐和的过程中,参考的一些材料:
- JRebel 永恒破解激活办法 – songfei_dream 的专栏
- idea 离线应用 jrebel(亲测可用) – lzt099 的博客 – CSDN 博客
- Jrebel 在 Idea 中应用 – 鹰眼 eagle- 故障被动辨认 – 3MS 常识治理社区
- JrebelLicenseServerforJava: A license server for Jrebel & JetBrains products, it also support JRebel for Android and XRebel.
- IDEA+Jrebel 实现热部署和近程调试 – ManageOne 云服务保障 – 3ms 常识治理社区
### 3. 设置 IDEA 为主动编译
- 因为 JRebel 是实时监控 class 文件的变动来实现热部署的,所以在 IDEA 环境下须要关上主动编译性能能力实现随时批改,随时失效。
- 按住 Ctrl + Alt + Shift + / 弹出,抉择 Registry 后勾选
### 4. Debug 启动服务
抉择 SpringBoot 的入口类,右键抉择 Debug with JRebel, 期待启动实现即可
### 5. 本地热部署
此时能够批改或者减少代码,通过 Ctrl + Shift + F9 即可实现从新编译热部署。此时再也不须要每减少一个函数体、类都须要进行重启的操作,大大晋升了 SpringBoot 开发调试的效率。
🤩 自此,咱们曾经学会了本地热部署的形式,须要近程调试与热部署形式进行配合调试请往下浏览。
## 三、近程热部署
在本节,将针对近程热部署与调试进行阐明,搭建一个高效的开发测试环境。
配置近程热部署服务,次要步骤如下:
- 在服务器装置 JRebel
- 配置本地 JRebel
- 在服务器用 JRebel 启动专案
- 本地新增远端服务器进行热部署
### 1. 配置服务器 JRebel
官网配置文档:JRebel remote server support in IntelliJ IDEA — JRebel 2019.x documentation
- 下载安装包,确保容器启动用户有权限拜访该门路
curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
- 因为,应用 SpringBoot 2.x,必须要下载安装最新版的 JRebel
- 也能够通过官网地址:JRebel Release Archive | JRebel.com,进行下载
- 下载好后能够通过 FTP/SFTP 工具上传至服务器,在 CentOS 下应用 unzip 进行解压,失去
jrebel
文件夹
unzip jrebel-stable-nosetup.zip
- 设置明码(进入到
jrebel
目录)
java -jar jrebel.jar -set-remote-password <password># 例如,设置明码为 12341234java -jar jrebel.jar -set-remote-password 12341234
- 激活服务端(进入到
jrebel/bin
目录,执行脚本)
在激活服务端中,JRebel 也提供了 3 种激活形式,具体地址:Activation — JRebel 2019.x documentation
在这里咱们通过 With license server URL as an argument 形式,具体脚本如下
./activate.sh http://192.168.72.131:8081/bc1fdd38-9be0-4251-a619-e14a4a6c21b9 frank_lin@whu.edu.cn
With evaluation license activation code as an argument
./activate.sh <activation-code>
### 2. 配置本地 JRebel
- Startup 初始化配置,点击确认
- JRebel Panel 窗口,将须要热部署的我的项目打包,生成
rebel.xml
和rebel-remote.xml
,如下图:
- 通过 maven package 从新打包生成 jar 包,上传至服务器
- 服务器端启动服务
- 启动参数
-agentpath:[/path/to/JRebel Agent] -Drebel.remoting_plugin=true
- 热部署启动
# 近程热部署 启动 java -agentpath:/root/commom/jrebel/lib/libjrebel64.so -Drebel.remoting_plugin=true -jar webapp.jar# 近程热部署 + 近程调试 启动 java -agentpath:/root/commom/jrebel/lib/libjrebel64.so -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Drebel.remoting_plugin=true -jar webapp.jarjava -agentpath:/var/www/jrebel/lib/libjrebel64.so -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Drebel.remoting_plugin=true -jar webapp.jar -port 8083
具体官网配置阐明:Server configuration — JRebel 2019.x documentation
启动日志如下,即阐明启动胜利
Listening for transport dt_socket at address: 5005
阐明启动了近程调试JRebel started in remote server mode.
阐明启动了近程热部署
Listening for transport dt_socket at address: 50052019-07-16 09:15:20 JRebel: Starting logging to file: /root/.jrebel/jrebel.log2019-07-16 09:15:20 JRebel:2019-07-16 09:15:20 JRebel: #############################################################2019-07-16 09:15:20 JRebel:2019-07-16 09:15:20 JRebel: JRebel Agent 2019.1.4 (201907051008)2019-07-16 09:15:20 JRebel: (c) Copyright 2007-2019 Rogue Wave Software, Inc.2019-07-16 09:15:20 JRebel:2019-07-16 09:15:20 JRebel: Over the last 1 days JRebel prevented2019-07-16 09:15:20 JRebel: at least 0 redeploys/restarts saving you about 0 hours.2019-07-16 09:15:20 JRebel:2019-07-16 09:15:20 JRebel: JRebel started in remote server mode.2019-07-16 09:15:20 JRebel:2019-07-16 09:15:20 JRebel:2019-07-16 09:15:20 JRebel: #############################################################
- 本地 JRebel -> Remote Servers 增加近程服务器
- 点击 Test Connection,点击 OK 确认
- 此时即可点击右上角“近程热部署”按钮后,通过 Ctrl + Shift + F9 即可实现从新编译热近程部署
能够先近程热部署后,再点击近程调试 Debug,即可实现先热部署再调试,大大放慢开发效率。
😄 自此,所有的配置过程都完结了!即可开始纵情享受,JRebel 近程热部署和近程调试~ 实现真正的热部署,无论是改了代码片段还是配置文件,都能够做到不必重新启动就失效!
## TODO
文档还有很多有余的中央,这是接下来会更新的局部
- [] 基于 Docker 近程调试与部署
- [] 近程调试,服务阻塞怎么办
## 参考资料
- Intellij IDEA 基于 Springboot 的近程调试 – 程序新视界 – CSDN 博客
- IDEA + Spring Boot + JRebel 热部署不能主动编译的解决方案和启动的几种形式 – github.com/duanluan – CSDN 博客
- IntelliJ IDEA 热部署插件 JRebel 收费激活图文教程(继续更新)_心得技巧_积微成著
- JRebel 遠端熱部署 springboot 教程 – IT 閱讀
- 微服务开发神器–JRebel 插件破解和实现本地 / 近程热部署教程(IntelliJ IDEA 版) – 掘金
- JRebel 近程热部署 springboot 教程 – whz 的博客 – CSDN 博客
本文由 mdnice 多平台公布