基于spring-loaded的热部署

JDK1.5之后提供了java.lang.instrument.Instrumentation,即java agent机制能够实现类的redefinition和retransform,它能够实现类的热替换,但遗憾的是功能很有限。
为工作需要,最近在研究热部署实现,遇到一个开源项目spring-loaded,看了下官方的介绍文档:发现它功能比JDK自带的强大多了。
经过自己的尝试,发现使用spring-loaded项目,它是基于javaAgent实现的一个代理,确实可以实现java应用的热部署。下面介绍下如何将spring-loaded引入到项目中。我们可以运行下面的这段代码,然后修改A.say()方法,看看在不重启JVM的情况下,是否能够动态改变。
public class SpringLoadTest
{
public static void main(String[] args) throws Exception
{
SpringLoadTest test = new SpringLoadTest();

while (true)
{
test .say();
Thread.sleep(3000);
}
}
public void say(){
System.out.println(“spring-loaded testing ...”);
}
}
为了使用spring-loaded实现热部署,我们只需要在启动JVM的时候,增加如下的启动参数即可-javaagent:springloaded-1.2.5.RELEASE.jar -noverify
如果是通过eclipse启动,那么可以在run confiuration中进行设置,如下图:
如果是通过eclipse启动,那么可以在run confiuration中进行设置
接下来我们看下如何在tomcat中使用spring-loaded实现war包的热部署。将下载的springloaded-1.2.5.RELEASE.jar放到%TOMCAT_HOME%/bin/目录下,然后修改该目录下的catalina.bat

set JAVA_OPTS=-javaagent:springloaded-1.2.5.RELEASE.jar -noverify

这样就完成了spring-loaded在tomcat下配置,能够检测tomcat下部署的web应用,在不重启tomcat的情况下,实现应用的热部署。
接下来我们看下如何在resin中使用spring-loaded实现war包的热部署。将下载的springloaded-1.2.5.RELEASE.jar放到%RESIN_HOME%/lib/目录下,然后修改resin配置目录下的resin.xml,在<server-default>中添加如下配置:
<jvm-arg>-javaagent:springloaded-1.2.5.RELEASE.jar</jvm-arg>
<jvm-arg>-noverify</jvm-arg>
这样就完成了spring-loaded在resin下的配置,能够检测resin下部署的web应用,在不重启resin的情况下,实现应用的热部署。
注意如果出现Error opening zip file or jar manifest missing:
javaagent:springloaded-1.2.5.RELEASE.jar
可以将此处改为jar的绝对路径即可。
目前最新版本的jar包正是springloaded-1.2.5.RELEASE.jar下载方式如下:
外网可到github获取最新版
https://github.com/spring-projects/spring-loaded
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值