使用spring-loaded开源项目,实现java程序和web应用的热部署
2015-09-06 00:00
513 查看
摘要: 使用spring-loaded开源项目,实现java程序和web应用的热部署
最近遇到一个开源项目spring-loaded,看了下官方的介绍文档:发现它功能比JDK自带的强大多了。
经过自己的尝试,发现使用spring-loaded项目,确实可以实现java应用的热部署。下面介绍下如何将spring-loaded引入到项目中。我们可以运行下面的这段代码,然后修改A.say()方法,看看在不重启JVM的情况下,是否能够动态改变。
为了使用spring-loaded实现热部署,我们只需要在启动JVM的时候,增加如下的启动参数即可
如果是通过eclipse启动,那么可以在run confiuration中进行设置
接下来我们看下如何在tomcat中使用spring-loaded实现war包的热部署。将下载的springloaded-1.2.0.RELEASE.jar放到%TOMCAT_HOME%/bin/目录下,然后修改该目录下的catalina.bat
这样就完成了spring-loaded的安装,能够检测tomcat下部署的webapp,在不重启tomcat的情况下,实现应用的热部署。
JDK1.5之后提供了java.lang.instrument.Instrumentation,即java agent机制能够实现类的redefinition和retransform。
redefinition对应Instrumentation.redefineClasses()能够实现类的热替换,但遗憾的是功能很有限。
1 2 3 4 | The redefinition may change method bodies, the constant pool and attributes. The redefinition must not add, remove or rename fields or methods, change the signatures of methods, or change inheritance. These restrictions maybe be lifted in future versions. |
1 2 3 4 5 6 7 | Spring Loaded is a JVM agent for reloading class file changes whilst a JVM is running. It transforms classes at loadtime to make them amenable to later reloading. Unlike 'hot code replace' which only allows simple changes once a JVM is running (e.g. changes to method bodies), Spring Loaded allows you to add/modify/delete methods/fields/constructors. The annotations on types/methods/fields/constructors can also be modified and it is possible to add/remove/change values in enum types. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package test; import demo.A; public class TestPreMain { // -javaagent:springloaded-1.2.0.RELEASE.jar -noverify public static void main(String[] args) throws Exception { A a = new A(); while ( true ) { a.say(); Thread.sleep( 3000 ); } } } |
1 | -javaagent:springloaded- 1.2 . 0 .RELEASE.jar -noverify |
1 | set JAVA_OPTS=-javaagent:springloaded- 1.2 . 0 .RELEASE.jar -noverify |
相关文章推荐
- java线程
- java获得服务器路径的几中方法
- spring使用aop
- Java第一周:1.5
- Java第一周:1.4
- [Java Concurrency in Practice]第十一章 性能与可伸缩性
- Java学习之二
- 深入分析Java线程中断问题
- Java的位运算符详解——与(&)、非(~)、或(|)、异或(^)
- java中判断空字符串时避免出现空指针的方法
- Java第一周:1.2
- Eclipse External Tools --变量设置
- JAVA自学第一天
- java获取地址经纬度
- Java中的左移右移<<、>>、>>>
- Java第一周:1.1
- Java实现文件的读写,复制
- [JavaWeb基础] 016.Struts2 国际化配置
- Java第一周:1.17
- Struts2入门-Hello Word实例