我们在开发一些大型项目的时候,由于项目中代码比较复杂,导致每次构建和运行都要花费大量时间。为了解决这个问题,我们可以使用一些热部署组件来实现代码运行过程中热部署。这样做的好处是可以帮助我们提升开发和调试的效率,使我们的代码开发获得一种开发即所得的效果。
热部署的插件有很多,像市面上比较流行的 JRebel
,或者是 Spring DevTools
都可以实现代码的热部署,这里详细介绍一下一款开源免费的代码热部署组件 HotSwap Agent,这个组件以Agent的方式对代码进行热部署。
HostSwap Agent
是一款开源的代码热部署组件。它的实现基于了 DCEVM
这款插件对JVM
进行了改造。同时针对市面上不同的框架如 Spring
,Hibernate
等都实现了相对应的热部署插件,此外用户还可以自定义热部署插件来实现自定义框架的热部署功能。
目前对于 JDK8 ,DCEVM 支持到了 Java-8u181
版本,在这之上的 Java 版本安装 DCEVM 启用 DCEVM 后会报错,因此对于 JDK8 的用户需要特别注意安装 DCEVM 在指定的 JDK8 版本上。
对于使用 JDK11 的用于则需要安装 TravaOpenJDK,该版本的 OpenJDK
集成了 HotSwapAgent
,因此使用该版本的用户不需要特别下载 HostSwapAgent ,只需要开启特定选项即可使用热部署功能。
如何安装 HotSwapAgent
这里我们着重讲解一下 HotSwapAgent在 JDK8 上的设置操作。
首先我们需要下载 DCEVM 插件,然后将其安装在对应版本的 JDK 上,由于DCEVM 最高支持 jdk8 的版本是 jdk8u181,因此我们需要首先下载该版本的jdk,并安装在我们的电脑上。
然后我们需要到 DCEVM 网站上下载对应的插件,将 DCEVM 安装到我们的JVM上。
下载完成后解压,打开插件。该插件会自动检查当前系统中有哪些 JVM,我们只需要按照提示将 DCEVM 安装到 jdk8u181
上即可。
注意dcevm
的安装模式有两种,第一种会将默认的jvm
替换为 dcevm
,默认启用相关特性,而第二种会将 dcevm
作为一个额外的选项,只有到配置了需要启用 dcevm
时才会启用 dcevm
,否则使用默认的 jvm
,这里如何设置看用户需要。
启动 dcevm 安装插件时需注意,需要以管理员的方式运行 dcevm 安装插件,否则可能会报权限不足的异常。
如何以管理员身份运行 jar 包
菜单中输入 cmd
,然后以管理员身份运行命令提示符,然后以 java -jar
方式运行 DCEVM
插件。
java -jar "D:\Downloads\DCEVM-8u181-installer-build2.jar"
接下来就是下载 HotSwapAgent ,在启动时添加该 jar包作为 agent 选项即可。
新建一个 SpringBoot
应用在 idea 中配置如下:
-XXaltjvm=dcevm
-javaagent:D:\Downloads\hotswap-agent-1.3.1-SNAPSHOT.jar=autoHotswap=true
注意
autoHotswap=true
一定要添加上,作为agent
参数不可少。
然后启动运行应用,如果出现 HotSwapAgent 日志就表示配置成功了。
几种异常的启动效果
HotSwapAgent 插件
除此之外,HotSwapAgent
提供了 Idea 等插件,用户可以按照需要下载使用。需要注意的是,在 jdk8 上仍然需要首先安装 DCEVM 作为支持,否则无法使用。
安装完成后,Ctrl+Alt+S打开设置。
在 Tools
->HotSwap
中设置参数:
在配置了上述插件后,我们就不要手动的一个个在启动选项中添加-agent
参数了,这个插件会自动帮我们添加相关参数。
测试
我们在启动应用后,在 controller 中新添加一个方法进行测试:
在代码编写完成后,别忘了手动构建一下Ctrl+F9。
调用测试:
参考资料
SpringBoot项目通过HotswapAgent实现热部署(JDK1.8)
用hotswap agent实现热替换代码
玩转 DCEVM + HotSwapAgent
HotSwapAgent-IntelliJ-IDEA-plugin