持续原创输出,点击上方蓝字关注我

目录

  • 前言
  • JRebel收费怎么破?
  • 什么是本地热部署?
  • 什么是远程热部署?
  • JRebel和devtools的区别
  • 如何安装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的根目录下执行以下命令:

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

-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
  1. 点击OK,即可添加成功。

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

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

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

多模块开发的一个坑

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

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

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

添加之后的代码如下:

<?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能够提高读者们的开发效率,反正我是提高了,哈哈~

热部署只知道devtools吗?JRebel不香吗?的更多相关文章

  1. springboot + devtools(热部署)

    技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...

  2. 【第十七章】 springboot + devtools(热部署)

    技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...

  3. 第十七章 springboot + devtools(热部署)

    技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...

  4. devtools进行热部署

    热部署的形式这里只介绍一种devtools devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymele ...

  5. Eclipse中安装JRebel热部署教程

    Eclipse中安装JRebel热部署教程 前言        Eclipse安装JRebel插件可快速实现热部署,节省了大量重启时间,提高开发效率. 本文只介绍Eclipse安装JRebel插件版本 ...

  6. SpringBoot配置devtools实现热部署

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...

  7. 使用 JRebel 进行远程热部署

    JRebel支持热部署,和远程热部署,本文我们来搭建一下远程热部署. 一.服务器安装 JRebel 1.官网下载最新的 JRebel 安装包,下载链接:https://zeroturnaround.c ...

  8. 学习Spring Boot:(五)使用 devtools热部署

    前言 spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是比速度比手动停止后 ...

  9. jrebel+idea 进行热部署配置

    1.安装和激活jrebel这里不在叙说 2.部署项目工程的两种方式 第一:打开项目配置project structure    配置Artificials 第二:tomcat加载项目  然后填写应用名 ...

随机推荐

  1. Centos-操作系统相关信息-uname

    uname 获取系统相关信息 相关选项 -a 显示全部信息 -m 显示系统CPU架构 x86_64 -n  显示主机名, 和 hostname 一样 -s 获取系统类型 -r   内核信息

  2. Java知识系统回顾整理01基础01第一个程序02命令行格式编译和执行Java程序

    一.先看运行效果 在控制台下运行第一个Java程序,可以看到输出了字符串 hello world 二.准备项目目录 通常都会在e: 创建一个project目录 在这个例子里,我们用的是e:/proje ...

  3. 【题解】CF940F Machine Learning

    Link 题目大意:单点修改,每次询问一个区间的所有颜色出现次数的\(\text{Mex}.\) 例如,区间中三种颜色分别出现了\(2,2,3\)次,又因为其他颜色出现次数一定是\(0\),所以这里的 ...

  4. ANNdotNET中的视觉神经网络设计器

    ANNdotNET简介 是一个在.net平台上进行深度学习的开源项目.NET Framework和.NET Core).该项目位于http://github.com/bhrnjica/anndotne ...

  5. ORA-00018: maximum number of sessions exceeded 超出最大会话数

    ORA-00018: maximum number of sessions exceededORA-00018: 超出最大会话数 Cause:       All session state obje ...

  6. TP5 调用快递鸟api 查询快递信息

    1,去快递鸟,下载sdk https://www.kdniao.com/api-track 下载PHPsdk 2,下载下来的事PHP文件,不是以类的形式显示的,所以为了方便,我把他封装成了类,不需要封 ...

  7. mapbox处理中文标注不能换行问题

    mapbox的换行侧率是根据空格进行的,因为中文中没有设置空格,因此换行不起作用. 解决方法:在node_modules\ol-mapbox-style\util.js  60行添加下列代码: let ...

  8. MacBook连接蓝牙鼠标、蓝牙键盘失败的解决方案

    问题: keychron k4连接不上MacBook,但是win10和iPhone都可以成功连接. 解决方法: 1.关闭wifi: 2.连接蓝牙键盘: 3.稍等一会,再连接wifi就可以了. 另外,苹 ...

  9. ScanTailor-ScanTailor 自动矫正图像歪斜

    ScanTailor 自动矫正图像歪斜   下面操作某一步可能会卡住,别担心情等待它处理完毕.   New Project ... Input Directory "Browse" ...

  10. 这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。

    这是why哥的第 70 篇原创文章 从Dubbo的一次提交开始 故事得从前段时间翻阅 Dubbo 源码时,看到的一段代码讲起. 这段代码就是这个: org.apache.dubbo.rpc.RpcCo ...