前言
作为Java开发人员,我有时会羡慕使用PHP或JavaScirpt等解释型语言在运行时及时看到代码的更改结果。使用Java,总是需要通过源码重新生成字节码,然后通过重新启动才能安全地更新。并且所有开发人员都知道启动后恢复所需状态需要时间过程很乏味。
因此,我也一直在寻找Java热部署方案,以我们平常使用的SpringBoot来说,实现热部署主要有以下几种方案:
SpringBoot Devtools/Springloaded
只支持方法体,新增/更改方法、类会重启整个项目
JRebel
优点:安装简单插件丰富
缺点:耗资源,收费昂贵不开源
HotswapAgent+DCEVM
优点:开源、资源消耗低
缺点:安装麻烦,支持的插件还在持续完善中
今天给大家介绍的是第三种方式的增强方案,基于Dcevm和集成了HotswapAgent的TravaOpenJDK。
特性
普通的OpenJDK HotSwap仅限于内部代码更改,而TravaOpenJDK允许以下代码更改:
● 添加/删除/修改类和字段
● 添加/删除/修改放法,添加/删除/修改方法注解
● 添加/删除/修改类,包括匿名类,能够正确地处理匿名类
● 添加/删除类的静态成员,重新初始化静态成员
● 添加/删除枚举值
● 刷新框架和应用程序服务器设置
配置
以JDK11为例,下载对应Windows/linux/macos二进制文件
https://github.com/TravaOpenJDK/trava-jdk-11-dcevm/releases
解压缩到用户指定目录
打开Idea > Project Structure > SDKs,配置下载的JDK版本
然后打开Run/Debug Configuration,VM Option添加运行参数 -XX:HotswapAgent=fatjar,指定触发方式
验证
启动项目,从控制台日志可以看出HotSwapAgent生效了
新建/修改Mapping url路径,修改,重新自动热部署完成,可以看到能够及时生效
大功告成~
更多特性请访问官方网站:http://hotswapagent.org/