目录
一、热部署与热加载
在应用运行的时升级软件,无需重新启动的方式有两种,热部署和热加载。
对于Java应用程序来说,热部署就是在服务器运行时重新部署项目,热加载即在在运行时重新加载class,从而升级应用。
二、实现原理
热加载的实现原理主要依赖java的类加载机制,在实现方式可以概括为在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳变掉了,则将类重新载入。
对比反射机制,反射是在运行时获取类信息,通过动态的调用来改变程序行为;
热加载则是在运行时通过重新加载改变类信息,直接改变程序行为。
热部署原理类似,但它是直接重新加载整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时也更费时间。
类加载机制
类加载机制是指在Java程序运行时,将类的字节码文件加载到内存中的过程。这个过程主要包括加载、链接和初始化三个阶段。
-
加载(Loading): 加载阶段是将类的字节码文件加载到内存中的过程。这一阶段通常由类加载器(ClassLoader)来完成。Java虚拟机(JVM)提供了三种内置的类加载器:Bootstrap ClassLoader、Extension ClassLoader、和Application ClassLoader。它们分别负责加载Java核心库、Java扩展库和应用程序类。
-
链接(Linking): 链接阶段包括验证、准备和解析三个步骤。
- 验证:确保加载的类符合Java语言规范,不会危害虚拟机的安全。
- 准备:为类的静态变量分配内存并设置默认初始值。
- 解析:将类、接口、字段和方法的符号引用转换为直接引用。
-
初始化(Initialization): 在这个阶段,执行类的初始化代码。这包括执行静态变量的赋值和执行静态代码块。类的初始化是在其被主动使用时触发的,如创建类的实例、访问类的静态变量或静态方法等。
类加载机制遵循类的生命周期,经历加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中,加载、验证、准备、解析、初始化五个阶段组成了类的加载过程。
三,Jrbel插件下载
首先在Idea中找到setting->plugins,在MarketPlace中搜索该插件。我已经下载好了
点击“应用”后,按要求重启一下Idea,使下载的Jrebel插件生效。
这个时候在Idea主界面侧边栏上就有Jrebel的安装指南出现了。
然后我们根据Jrebel的安装指南进行安装即可。
激活Jrebel
方法一
第一行输入网址:https://jrebel.qekang.com/GUID
生成 GUID 的地址为:
1. 安装JRebel插件后,注册地址填写激活网址 + 生成的GUID,邮箱随便填写,然后直接激活即可
激活网址列表,尽量用排序靠前的
http://jrebel-license.jiweichengzhu.com/{GUID}
https://jrebel.qekang.com/{GUID}
GUID可以使用在线GUID地址在线生成,然后替换{GUID}就行。
2.下面邮箱地址可随便输入。
3.选择我同意
4.提交
方法二
.前置步骤均一致,在填入Team URL时,填入以下内容
GUID可以使用在线GUID地址在线生成,然后替换{GUID}就行。
2.下面邮箱地址可随便输入。
3.选择我同意
4.提交
如果报Unable to connect to license server.Check your network connnection and/or VPN settings.
需要在此处下载自己机器系统相对应的工具,如图:
下载好了后,进行安装打开(激活插件时,程序保持启动,激活成功后可关闭),如图:
再次执行上面的操作步骤即可。
方法三
https://jrebel.com.cn/{GUID},我是用的第三个才管用
注意
我这里iead是2023.1.1,jrebel是2023..2.4.1都算是新版本,最好还是用旧的参考这个
Idea热部署插件JRebel+XRebel_jrebel插件下载-CSDN博客
离线模式
到这还没完,虽然现在 JRebel就能正常使用了,
但很多人往往用不到几天就提示激活失败, 无法使用了,甚至jar包结束运行后激活就失败了。
原因在于Jrebel激活之后默认是联网使用的 , 在该模式下 , JRebel会一直联网监测激活信息。
所以要调为离线使用的,操作方法就是进入Jrebel设置中点击Work offile 按钮即可。
使其变为离线模式即可。点击以后就是这样
配置自动编译
找到setting->build,Excution->Compiler,并勾选Build project automatically。
然后找到setting->Advanced Setting,勾选Compiler中的
Allow auto-make to start even if developed application is currently running
我是基于idea2023.1.1版本配置的,基本上配置完成就可以了。
四,本地热部署使用
左侧的图标对应的本地热部署,右侧的对应远程热部署。
勾选成功后项目或者模块中的src/resource目录下回生成一个rebel.xml文件
主启动类,和运行栏也会出现Jrebel运行的图标。
都配置好了以后,可以先试一下,第一次运行要重新编译,打包,执行。如果不生效可以重启一次idea, 一般来讲重启后都可以生效。
搭配mybatisPlus
Jrebel MybatisPlus Extension,顾名思义就是热部署中mybatis的扩展,他的功能就是配合 Jrebel 一起使用,修改 mybatis 的 mapper.xml 文件不用重启项目
在 File -> Setting -> plugin 搜索框搜索Jrebel MybatisPlus Extension