热部署只知道devtools吗?JRebel不香吗?
持续原创输出,点击上方蓝字关注我

目录
前言 JRebel收费怎么破? 什么是本地热部署? 什么是远程热部署? JRebel和devtools的区别 如何安装JRebel? 如何本地热部署? 如何远程热部署? 多模块开发的一个坑 总结
前言
Spring Boot
中的热部署相信大家用的最多的就是devtools
,没办法,官推的。
JRebel
相对于devtools
,个人觉得无论是加载速度还是使用便捷,JRebel
完胜。
作为「前辈级别」的开发利器,JRebel
真的值得开一章节来好好介绍下。
JRebel收费怎么破?
前面作者单独写过一篇激活JRebel
的文章教程,没钱的可以去看看:撸了个反向代理工具,搞一搞JRebel。
「特此声明」:作者支持原版,不差钱的建议装个原版的,毕竟这么好的工具值得。
什么是本地热部署?
传统的开发中,项目在启动过程中代码有所改动是不会重新编译运行的,而是要关闭项目重新启动后修改的代码才会生效。
「本地热部署」则是能够在项目运行中感知到特定文件代码的修改而使项目不重新启动就能生效。
什么是远程热部署?
远程热部署的远程
两字指的是「远程服务器」,平时开发中,只要本地代码改动了,必须要重新打包上传服务器重新启动之后才会生效,「你这样干过吗?.......」

「远程热部署」则是本地代码改变之后,不用重新打包上传服务器重启项目就能生效,本地改变之后能够自动改变服务器上的项目代码。
有些人听到这里懵逼了,这是什么鬼?还有这么神奇的东西...........

JRebel和devtools的区别
前辈和后辈的比较其实没什么可比性,如果不是JRebel「收费」了,绝对是所有程序员的首选。但还是要说说他们之间的区别,如下:
JRebel
加载的速度优于devtools
JRebel不仅仅局限于Spring Boot项目,可以用在任何的Java项目中。 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
这个文件是JRebel
的lib
目录下的文件。
-Xdebug
之后,-jar
之前的命令是开启远程调试的,如果不需要的可以去掉,不知道远程调试的,可以看:惊呆了!Spring Boot还能开启远程调试~。
项目启动成功后,服务器上的配置就完成了。
此时在IDEA中需要设置连接到刚才启动的项目,打开File->setting->JRbel&XRebel->JRbel Remote Servers
,如下图:

步骤如下:
点击 +
号添加一个服务填写信息
server name
随便起个服务的名字server URL
格式:http://ip:port
,这里的ip
是服务器的IP,port
是项目端口号。远程密码则是上文设置的 JRebel
的密码123456789
。
点击 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不香吗?的更多相关文章
- springboot + devtools(热部署)
技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...
- 【第十七章】 springboot + devtools(热部署)
技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...
- 第十七章 springboot + devtools(热部署)
技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...
- devtools进行热部署
热部署的形式这里只介绍一种devtools devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymele ...
- Eclipse中安装JRebel热部署教程
Eclipse中安装JRebel热部署教程 前言 Eclipse安装JRebel插件可快速实现热部署,节省了大量重启时间,提高开发效率. 本文只介绍Eclipse安装JRebel插件版本 ...
- SpringBoot配置devtools实现热部署
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...
- 使用 JRebel 进行远程热部署
JRebel支持热部署,和远程热部署,本文我们来搭建一下远程热部署. 一.服务器安装 JRebel 1.官网下载最新的 JRebel 安装包,下载链接:https://zeroturnaround.c ...
- 学习Spring Boot:(五)使用 devtools热部署
前言 spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是比速度比手动停止后 ...
- jrebel+idea 进行热部署配置
1.安装和激活jrebel这里不在叙说 2.部署项目工程的两种方式 第一:打开项目配置project structure 配置Artificials 第二:tomcat加载项目 然后填写应用名 ...
随机推荐
- 腾讯一面!说说ArrayList的遍历foreach与iterator时remove的区别,我一脸懵逼
本文基于JDK-8u261源码分析 1 简介 ArrayList作为最基础的集合类,其底层是使用一个动态数组来实现的,这里"动态"的意思是可以动态扩容(虽然ArrayList可 ...
- 数论(8):min_25 筛(扩展埃氏筛)
min_25 筛介绍 我们考虑这样一个问题. \[ans=\sum_{i = 1}^nf(i)\\ \] 其中 \(1 \le n \le 10^{10}\) 其中 \(f(i)\) 是一个奇怪的函数 ...
- 019 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 13 数据类型转换的代码示例
019 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 13 数据类型转换的代码示例 本文知识点:Java中的数据类型转换案例 学习视频有误,导致没法写文,文章内容 ...
- 【题解】[AHOI2013]作业
Link 题目大意:\(n\)个数,\(m\)个询问,每次四个参数,\(l,r,a,b\),问区间\([l,r]\)中出现过的,数值在\([a,b]\)区间中的数的个数以及区间\([l,r]\)中数值 ...
- 探索与英特尔XDK
下载Geolocation.rar - 6.3 KB 下载Abhishek3.rar - 425.1 KB 下载Abhishek3.crosswalk.x86.20140824201436.rar - ...
- 2020年了,IT外企还香吗?
本来是刚发了<世上有不用加班的程序员吗?>,有朋友问到IT外企不加班福利好什么的,就回复了几句. 老王观点: 现在IT外企已经不值得羡慕了,08.09年那会,ibm,惠普还是香饽饽,当时人 ...
- [转] Swoft HTTP 服务
转载自Go语言中文网, https://studygolang.com/articles/20667 传统架构 PHP-FPM + Nginx 传统架构中所使用的Nginx + PHP-FPM的模型中 ...
- 如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (二)
创建 API 我们之前已经跑过 Gin 框架的代码,现在是时候加些功能进去了. 读取全部信息 我们先从"增删改查"中的"查"入手,查询我们之前添加的信息.我接下来要删除几行代码,并把 Gin ...
- linux磁盘空间满的处理
Java中运行SQL插入数据时报错: linux磁盘空间满处理: 1.df -h 查看磁盘空间占用,实际上是查看磁盘块占用的文件(block) 2.分别查看输入以下命令 (面对磁盘满了,通过下列命令 ...
- 手写Redux-Saga源码
上一篇文章我们分析了Redux-Thunk的源码,可以看到他的代码非常简单,只是让dispatch可以处理函数类型的action,其作者也承认对于复杂场景,Redux-Thunk并不适用,还推荐了Re ...