基于 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 的选项卡