使用spring-loaded开源项目,实现java程序和web应用的热部署
2014-11-03 20:36
1221 查看
JDK1.5之后提供了java.lang.instrument.Instrumentation,即java agent机制能够实现类的redefinition和retransform。
redefinition对应Instrumentation.redefineClasses()能够实现类的热替换,但遗憾的是功能很有限。
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.
最近遇到一个开源项目spring-loaded,看了下官方的介绍文档:发现它功能比JDK自带的强大多了。
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.
经过自己的尝试,发现使用spring-loaded项目,确实可以实现java应用的热部署。下面介绍下如何将spring-loaded引入到项目中。我们可以运行下面的这段代码,然后修改A.say()方法,看看在不重启JVM的情况下,是否能够动态改变。
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); } } }
为了使用spring-loaded实现热部署,我们只需要在启动JVM的时候,增加如下的启动参数即可
-javaagent:springloaded-1.2.0.RELEASE.jar -noverify
如果是通过eclipse启动,那么可以在run confiuration中进行设置
set J***A_OPTS=-javaagent:springloaded-1.2.0.RELEASE.jar -noverify
这样就完成了spring-loaded的安装,能够检测tomcat下部署的webapp,在不重启tomcat的情况下,实现应用的热部署。
相关文章推荐
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- 关于使用nat123软件实现外网访问内网的部署在Tomcat服务器中的Java Web项目
- 使用Eclipse-jee3.6版本部署web项目已实现修改java代码不用重启
- spring-loaded 实现web项目热部署
- JAVA_WEB项目之Spring中使用AOP编程运用到Lucene中实现解耦
- JAVA_WEB项目之使用Spring的xml配置方式在项目中管理Lucene检索框架
- Java桌面应用安装部署、安装程序制作(exe4j + Inno Setup) ——之二:使用MyEclipse将应用制作成可执行的JAR包
- 使用 Java 实现 Comet 风格的 Web 应用
- 使用 Java 实现 Comet 风格的 Web 应用
- 使用Maven自动部署Java Web应用到Tomcat服务器
- 【转载】使用 Java 实现 Comet 风格的 Web 应用
- 使用JRebel实现Web项目热部署, 提高开发效率
- 使用spring实现事务管理(@transactional)的遇到的两个异常:java.lang.noclassdeffounderror:org/objectweb.asm
- 使用 Java 实现 Comet 风格的 Web 应用
- 用Eclipse在Web项目引用Java项目时实现热部署
- 使用 Java 实现 Comet 风格的 Web 应用