热部署只知道devtools吗?JRebel不香吗?

  • 前言
  • JRebel收费怎么破?
  • 什么是本地热部署?
  • 什么是远程热部署?
  • JRebel和devtools的区别
  • 如何安装JRebel?
  • 如何本地热部署?
  • 如何远程热部署?
  • 多模块开发的一个坑
  • 总结

Spring Boot中的热部署相信大家用的最多的就是 devtools,没办法,官推的。

JRebel相对于 devtools,个人觉得无论是加载速度还是使用便捷, JRebel完胜。

作为 「 前辈级别」的开发利器, JRebel真的值得开一章节来好好介绍下。

JRebel收费怎么破?

「 特此声明」:作者支持原版,不差钱的建议装个原版的,毕竟这么好的工具值得。

什么是本地热部署?

传统的开发中,项目在启动过程中代码有所改动是不会重新编译运行的,而是要关闭项目重新启动后修改的代码才会生效。

「 本地热部署」则是能够在项目运行中感知到特定文件代码的修改而使项目不重新启动就能生效。

什么是远程热部署?

远程热部署的 远程两字指的是 「 远程服务器」,平时开发中,只要本地代码改动了,必须要重新打包上传服务器重新启动之后才会生效, 「 你这样干过吗?…….」

「 远程热部署」则是本地代码改变之后,不用重新打包上传服务器重启项目就能生效,本地改变之后能够自动改变服务器上的项目代码。

有些人听到这里懵逼了,这是什么鬼?还有这么神奇的东西………..

JRebel和devtools的区别

前辈和后辈的比较其实没什么可比性,如果不是JRebel 「 收费」了,绝对是所有程序员的首选。但还是要说说他们之间的区别,如下:

如何安装JRebel?

本地热部署只需要在 IDEA中装一个JRebel的插件,远程热部署需要在服务器上装一个JRebel,这两种方式在上一篇文章都介绍过,不会的可以去看看:撸了个反向代理工具,搞一搞JRebel

如何本地热部署?

JRebel插件安装完成之后,将 IDEA中的 自动编译开启,然后找到 IDEA中的 JRebel的工具面板,将所需要热部署的项目或者模块勾选上即可,如下图:

勾选成功之后将会在项目或者模块的 src/resource下生成一个 rebel.xml文件。

此时在 Spring Boot的主启动类上右键,将会出现以 JRebel启动的选项,如下图:

当然在 IDEA的右上角也存在启动的按钮,如下图:

①是本地启动和 DEBUG模式启动, ②是远程热部署的时候更新按钮。

此时就已经配置成功了,如果勾选的项目或者模块出现了改变,按 CRTL+SHIFT+F9则会自动重新编译加载改变的部分,不用再重新启动项目了。

如何远程热部署?

成功后需要设置远程连接的密码,在 JRebel的根目录下执行以下命令:

java -jar jrebel.jar -set-remote-password 123456789

此处设置的 123456789则是远程的密码,在 IDEA连接服务器的时候需要。

服务器配置成功后,在IDEA中JRebel的面板中设置远程热部署的模块,如下图:

勾选成功后,将会在 src/resource下生成一个 rebel-remote.xml文件。

此时将 Spring Boot项目打包成一个 Jar,上传到服务器,执行以下命令启动项目:

nohup java -agentpath:/usr/local/jrebel/lib/libjrebel64.so  -Drebel.remoting_plugin=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9083 -jar xxx.jar &

libjrebel64.so这个文件是 JRebellib目录下的文件。

项目启动成功后,服务器上的配置就完成了。

此时在IDEA中需要设置连接到刚才启动的项目,打开 File->setting->JRbel&XRebel->JRbel Remote Servers,如下图:

步骤如下:

  • server name 随便起个服务的名字
  • server URL 格式: http://ip:port ,这里的 ip 是服务器的IP, port 是项目端口号。
  • 远程密码则是上文设置的 JRebel 的密码 123456789

以上设置成功后,点击右上角的远程部署按钮,下图中的 ②号按钮,则会自动更新服务器上已启动项目的代码使之本地修改在服务端自动生效:

JRebel Console这个面板中将会打印出远程热部署更新的日志信息,如下图:

只要本地有了更改,点击远程热部署按钮,则会自动上传代码到服务器端并实时更新,不用重新启动项目。

多模块开发的一个坑

如果是多模块开发,比如分为 api(最终的 Jar包), core(核心包), service(业务层的包),最终打包运行在服务器端的是 api这个模块,其余两个模块都是属于依赖模块,虽然在 JRebel远程热部署选项中都勾选了,但是它们的代码更改并不会在服务端生效。

这个如何解决呢?很简单,在 api项目下的 rebel-remote.xml文件中将其余两个模块添加进去,默认的如下:


<span><span class="hljs-tag"><<span class="hljs-name">rebel-remote</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://www.zeroturnaround.com/rebel/remote"</span>></span>
<span>    <span class="hljs-tag"><<span class="hljs-name">id</span>></span>xx.xx.xx.api<span class="hljs-tag">id</span>></span>
<span><span class="hljs-tag">rebel-remote</span>></span>
</span>

添加之后的代码如下:


<span><span class="hljs-tag"><<span class="hljs-name">rebel-remote</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://www.zeroturnaround.com/rebel/remote"</span>></span>
<span>    <span class="hljs-tag"><<span class="hljs-name">id</span>></span>xx.xxx.xx.api<span class="hljs-tag">id</span>></span>
<span>    <span class="hljs-tag"><<span class="hljs-name">id</span>></span>xx.xx.xx.service<span class="hljs-tag">id</span>></span>
<span>    <span class="hljs-tag"><<span class="hljs-name">id</span>></span>xx.xx.xx.core<span class="hljs-tag">id</span>></span>
<span><span class="hljs-tag">rebel-remote</span>></span>
</span>

以上的 <id></id>标签中指定的是模块的包名(package)。

作为热部署界的前辈, JRebel依然是敌得过后浪,果然是姜还是老的辣……

希望这篇文章介绍的 JRebel能够提高读者们的开发效率,反正我是提高了,哈哈~

Original: https://www.cnblogs.com/Chenjiabing/p/13924849.html
Author: 爱撒谎的男孩
Title: 热部署只知道devtools吗?JRebel不香吗?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711136/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球