专栏首页码猿技术专栏Spring Boot 使用JRebel实现热部署

Spring Boot 使用JRebel实现热部署

前言

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

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

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

JRebel收费怎么破?

前面作者单独写过一篇激活JRebel的文章教程,没钱的可以去看看:撸了个反向代理工具,搞一搞JRebel

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

什么是本地热部署?

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

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

什么是远程热部署?

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

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

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

JRebel和devtools的区别

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

  1. JRebel加载的速度优于devtools
  2. JRebel不仅仅局限于Spring Boot项目,可以用在任何的Java项目中。
  3. devtools 方式的热部署在功能上有限制,方法内的修改可以实现热部署,但新增的方法或者修改方法参数之后热部署是不生效的。

如何安装JRebel?

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

如何本地热部署?

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

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

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

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

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

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

如何远程热部署?

远程热部署需要在服务器上安装并激活JRebel,参照上篇文章:撸了个反向代理工具,搞一搞JRebel

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

1

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

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

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

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

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

1

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目录下的文件。

-Xdebug之后,-jar之前的命令是开启远程调试的,如果不需要的可以去掉,不知道远程调试的,可以看:惊呆了!Spring Boot还能开启远程调试~

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

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

步骤如下:

  1. 点击+号添加一个服务
  2. 填写信息
    • server name随便起个服务的名字
    • server URL格式:http://ip:port,这里的ip是服务器的IP,port是项目端口号。
    • 远程密码则是上文设置的JRebel的密码123456789
  3. 点击OK,即可添加成功。

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

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

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

多模块开发的一个坑

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

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

1234

<?xml version="1.0" encoding="UTF-8"?><rebel-remote xmlns="http://www.zeroturnaround.com/rebel/remote"> <id>xx.xx.xx.api</id></rebel-remote>

添加之后的代码如下:

123456

<?xml version="1.0" encoding="UTF-8"?><rebel-remote xmlns="http://www.zeroturnaround.com/rebel/remote"> <id>xx.xxx.xx.api</id> <id>xx.xx.xx.service</id> <id>xx.xx.xx.core</id></rebel-remote>

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

总结

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

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

另外作者为大家准备接近10M的面筋,涵盖后端的各个层面,老规矩,公众号内回复Java面试宝典即可获取。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot热部署-JRebel

    JRebel就比较牛逼了,JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    全栈程序员站长
  • 实现 Java 热部署的几种解决方案

    happyJared
  • Spring Boot 开发应用热部署

    spring-boot-devtools 实现热部署 想在Spring Boot中使用该功能非常简单,添加依赖: <!-- 热部署模块 --> <depende...

    斯武丶风晴
  • 实现Java热部署的几种解决方案

    happyJared
  • Spring Boot 五种热部署方式,极速开发就是生产力!

    在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.p...

    Java技术栈
  • Spring Boot 中的热部署方式总结

    在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.p...

    程序员小强
  • Spring Boot 五种热部署方式,再也不用老重启了!

    在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.p...

    JAVA葵花宝典
  • Spring Boot 五种热部署方式,再也不用老重启了!

    在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.p...

    趣学程序-shaofeer
  • Spring Boot 五种热部署方式,提高生产效率

    在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.prop...

    搜云库技术团队
  • Intellij IDEA 4种配置热部署的方法

    转载自https://www.cnblogs.com/jcook/p/6910238.html

    allsmallpig
  • Spring Boot 五种热部署方式

    在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.prop...

    程序员白楠楠
  • 芋道 Spring Boot 热部署入门

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/hot-swap/ 「芋道源码」欢迎转载,保留摘要,谢谢!

    芋道源码
  • IDEA + Spring Boot 的三种热加载方案,看完弄懂,不用加班~

    在日常开发中,我们需要经常修改 Java 代码,手动重启项目,查看修改后的效果。如果在项目小时,重启速度比较快,等待的时间是较短的。但是随着项目逐渐变大,重启的...

    芋道源码
  • IDEA 下 SpringBoot 自动重启

    Java 的项目每次修改了源码以后想要测试都要停止服务,然后重新启动服务。虽然就是点几下鼠标的事情,多少还是比较麻烦的。能自动的还是自动的好。

    码农UP2U
  • Spring Boot实现热部署

    在Spring Boot实现代码热部署是一件很简单的事情,代码的修改可以自动部署并重新热启动项目。 引用devtools依赖 <dependency> ...

    Java技术栈
  • Spring Boot 之 spring-boot-devtools 实现热部署

    选择“Registry”,回车,找到“complier.automake.allow.when.app.running” 

    wuweixiang
  • 推荐你使用JRebel提升开发效率

    项目每次启动都要一分多钟,改一行代码就要重启很难受?推荐一款提高工作效率的热加载JVM插件:JRebel。

    Java艺术
  • IDEA快捷键拆解系列(十六):插件篇

      本文整理了博主用过的一些IDEA插件。其中,五星是强烈推荐,四星是比较推荐,三星仅供参考,两星的就不多说了,一星是炫酷型的插件,一般帮助也不大。最后,欢迎留...

    happyJared
  • SpringBoot魔法堂:应用热部署实践与原理浅析

    后端开发的同学想必每天都在重复经历着修改代码、执行代码编译,等待……重启Tomcat服务,等待……最后测试发现还是有bug,然后上述流程再来一遍(我听不见)? ...

    ^_^肥仔John

扫码关注云+社区

领取腾讯云代金券