乐趣区

关于后端:基于-SpringBoot-IDEA-JRebel-玩转远程热部署与远程调试

  • 基于 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 天)

  1. 进入官网 Evaluate JRebel,填写残缺信息
  1. 点击 Register 获取激活码

此时即可获取你的激活码,复制保留到本地,后续将会用到。

  1. 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)。

  1. 因为网络稳定性思考,这里咱们将搭建本人的 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任意一个邮箱 进行谐和(这里咱们先筹备好这两个参数即可)
  1. 在 Team URL 中填入以上两个参数,即可实现激活

在 file->settings->plugins->JRebel 中查看是否已显示激活,激活后显示 valid,图标为绿色。此时能够点击 Work offline 实现离线的验证,离线下有效期为半年工夫,半年后能够从新认证即可。若是 online 则实时会往服务端进行匹配验证。举荐应用 Work offline 形式!

  1. 补充:这里咱们次要应用本人搭建 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 为主动编译

  1. 因为 JRebel 是实时监控 class 文件的变动来实现热部署的,所以在 IDEA 环境下须要关上主动编译性能能力实现随时批改,随时失效。
  1. 按住 Ctrl + Alt + Shift + / 弹出,抉择 Registry 后勾选

### 4. Debug 启动服务

抉择 SpringBoot 的入口类,右键抉择 Debug with JRebel, 期待启动实现即可

### 5. 本地热部署

此时能够批改或者减少代码,通过 Ctrl + Shift + F9 即可实现从新编译热部署。此时再也不须要每减少一个函数体、类都须要进行重启的操作,大大晋升了 SpringBoot 开发调试的效率。

🤩 自此,咱们曾经学会了本地热部署的形式,须要近程调试与热部署形式进行配合调试请往下浏览。

## 三、近程热部署

在本节,将针对近程热部署与调试进行阐明,搭建一个高效的开发测试环境。

配置近程热部署服务,次要步骤如下:

  1. 在服务器装置 JRebel
  2. 配置本地 JRebel
  3. 在服务器用 JRebel 启动专案
  4. 本地新增远端服务器进行热部署

### 1. 配置服务器 JRebel

官网配置文档:JRebel remote server support in IntelliJ IDEA — JRebel 2019.x documentation

  1. 下载安装包,确保容器启动用户有权限拜访该门路
curl -O http://dl.zeroturnaround.com/jrebel-stable-nosetup.zip
  • 因为,应用 SpringBoot 2.x,必须要下载安装最新版的 JRebel
  • 也能够通过官网地址:JRebel Release Archive | JRebel.com,进行下载
  1. 下载好后能够通过 FTP/SFTP 工具上传至服务器,在 CentOS 下应用 unzip 进行解压,失去 jrebel 文件夹
unzip jrebel-stable-nosetup.zip
  1. 设置明码(进入到 jrebel 目录)
java -jar jrebel.jar -set-remote-password <password># 例如,设置明码为 12341234java -jar jrebel.jar -set-remote-password 12341234
  1. 激活服务端(进入到 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

  1. Startup 初始化配置,点击确认
  1. JRebel Panel 窗口,将须要热部署的我的项目打包,生成 rebel.xmlrebel-remote.xml,如下图:
  1. 通过 maven package 从新打包生成 jar 包,上传至服务器
  1. 服务器端启动服务
  • 启动参数
-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:  #############################################################
  1. 本地 JRebel -> Remote Servers 增加近程服务器
  1. 点击 Test Connection,点击 OK 确认
  1. 此时即可点击右上角“近程热部署”按钮后,通过 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 多平台公布

退出移动版