众所周知,IDEA 自带的热加载只支持方法内的热加载,而使用 HotSwapAgent 不仅支持方法内的热加载,并且可实现新增方法的热加载,甚至是新增类的热加载,可谓是提高开发效率的神器
本文主要介绍在 IDEA 下使用 HotSwapAgent 来进行 SpringBoot 下的热部署;
接下来我们开始配置 HotSwapAgent
1 安装 DCEVM
DCEVM 是个JDK的插件,提供类似 JRebel 的热加载功能,能够在运行时重新定义加载的类,实现“热加载、热插拔、热部署”,而 HotSwapAgent 插件则是实现了 Servlet 程序的热加载功能,并且 DCEVM + HotSwapAgent 开源免费,更适合广大开发者使用。
安装 DCEVM 需要和 JDK 版本相对应,你需要先确定自己的 JDK 版本是否是 DCEVM 所支持的版本
https://github.com/dcevm/dcevm/releases
写此文时,DCEVM 支持的最新 JDK 版本是Java 8u181
如果你的JDK版本不被支持,则需要去 Oracle Java Archive 这个页面下载对应版本 JDK 并安装
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
下载 JDK 需要自备 Oracle 的账号
下载并安装好对应版本 JDK 后,我们再次来确定 JDK 版本为对应版本
此时我们可以下载 DCEVM patch 进行安装,这里我下载的是 DCEVM-8u181-installer-build2.jar
https://github.com/dcevm/dcevm/releases
运行以下命令开始进行安装
java -jar DCEVM-8u181-installer-build2.jar
这里需要选择安装目录,安装目录默认为 JDK 安装目录,如果没有则需要手动添加,然后点击 Install DCEVM as altjvm
这个按钮安装。
2 IntelliJ IDEA 配置
在 IDEA 插件库中搜索 HotSwapAgent 进行安装插件
然后进行 HotSwapAgent plugin 配置
勾选为所有项目启动 HotSwapAgent 插件
PS:请手动检查插件目录下的 jar 包是否自动下载成功,如果下载不成功,则手动下载 jar 包替换
图中的 Agent installation 路径为Jar包保存路径
jar 包下载地址:https://github.com/HotswapProjects/HotswapAgent/releases
3 热部署启动
在 DEBUG 模式下启动应用程序。如果设置正确完成,您将在控制台中看到 HOTSWAP 代理通知。
4 手动触发热部署方式
在应用启动的过程中,如果有修改代码,可以手动触发热部署使其生效
MacOS: Command+Shift+F9 / Win: Ctrl+Shift+F9
手动触发热加载的时候,光标需要将焦点保持在需要热加载的类上面
当然你也可以配置自动触发热部署,由于我不喜欢自动触发,所以在此不做过多介绍。
5 热加载测试
我们使用Spring Initializr快速创建一个 SpringBoot 应用,并且编写一个简单的测试接口:
应用使用 DEBUG 模式启动的时候有提示被 HotSwapAgent 代理
使用浏览器访问测试接口,正常访问
1 修改方法体内代码,手动触发热加载
提示1个类被重新加载
再次访问接口,方法体内修改的代码已经生效
2 新增一个方法,手动触发热加载
提示1个类被重新加载,并且类被重新注册
访问新增的接口,新增的方法已经生效
3 新增一个类,手动触发热加载
提示0个类被重新加载,但是新增的Controller2类已经被注册,说明只能重新加载被 Spring 注解标注的类
访问新增的类接口,新增的类已经生效
6 测试总结
经测试,修改方法体内代码,修改方法,并且新增类都是可以支持热加载,但是新增类只支持注解扫描的类,XML配置文件不能进行热加载
7 参考文档
https://github.com/HotswapProjects/HotswapAgent
https://github.com/dmitry-zhuravlev/hotswap-agent-intellij-plugin
感謝您的精彩貼文。我們從您的貼文中受益匪淺,許多人也會從您的海報中受益。我們為您帶來電話行銷數據。透過它你會得到很多資訊。幫助您發展業務的資訊。我們的資料庫非常先進。我們的資訊100%準確。我們的垃圾郵件率非常低。如果您從我們的資料庫購買,您將受益匪淺
行業特定資料庫您將找到所有類型的行業資訊。在這裡,您可以找到任何目標行業的聯絡人資料庫,以促進您的業務。例如,賭博資訊、外國人資訊、加密貨幣使用者資訊、職業資訊、投注資訊、求職資訊、交易資訊等類型資訊。我們透過世界一流的電話行銷數據網站銷售澳洲電話號碼數據。
感谢分享,一直在用jrebel,正好可以体验下不一样的工具,感受下区别
你写得非常清晰明了,让我很容易理解你的观点。
我按照博主的方法测试,同个controller里增加方法都不生效,请问博主的springboot是什么版本?我是 2.5.2 ,不知道是不是和版本有关系,dcevm和hotswap agent的版本应该是一样的
我是使用外置Tomcat 8.5.66启动的,不行,但是如果是springboot main方法启动,是可以的。但hotswap是有Tomcat plugin的啊,博主试过外置Tomcat吗?
学到了
感谢分享 赞一个
还是在一直白嫖jrbel