zoukankan      html  css  js  c++  java
  • 1001种玩法 | HotswapAgent:支持无限次重定义运行时类与资源

    Java运行时无限制的类和资源的重定义。新智云(www.enncloud.cn)

    HotSwapAgent 项目的主要目的是避免臭名昭著的开发周期,即“更改->重启+等待->检测”。在开发期间保存并重新加载是标准的流程,而且其他语言(包括C#)也有这种流程。

    功能特性

    • 扩展的 Hotswap可以更改方法体,增加或重命名某个方法和字段等。HotswapAgent无法做到的是层级改动(比如更改超类或者是移除接口)。

    • 你可以在集成桌面开发环境的debug模式下,通过使用标准的Java Hotswap来重新加载被更改的类。

    • 也可以在编辑完成后,通过设置Hotswap的自动属性(-XXaltjvm=dcevm -javaagent:PATH_TO_AGENT\hotswap-agent.jar=autoHotswap=true)来重新加载被更改的类。该设置甚至不用重启就可以在产品系统上完成重新加载。

    • 自动配置 – 在运行时的Java应用程序中登记过的所有本地类和资源都被监控,以便重新加载(在本地文件系统中的所有文件,但不包括JAR包中的文件)。

    • 额外的classpath – 如果某个运行时类在依赖的JAR包中,那么 需要更改该运行时类?使用额外的classpath属性可以添加任何目录作为classpath,以便监测这些路径中的类文件。

    • 在作出修改后要重新加载资源 – 应用服务器通常重新加载来自网页应用目录中的资源。但是其他的资源(比如src/main/resources)是如何重载的?使用watchResource属性可以添加任何路径来监测资源的改动。

    • 支持框架 – 通过插件系统,许多框架都是被支持的。新的插件可以被轻松的添加。

    • 快速 – 在插件被初始化之前,它是不会消耗任何资源或是让应用变慢的(阅读运行时的开销,你可以了解更多这方面的信息)。

    下载

    https://github.com/dcevm/dcevm/releases

    提供了JAR文件及源代码下载。

    快速上手

    安装

    下载latest release of DCEVM Java patch,并启动安装程序(比如,java -jar installer-light.jar)。目前你需要为Java主版本(7/8)选择合适的安装程序。

    在你的硬盘上选择一个安装java的目录,并点击“Install DCEVM as altjvm”按钮。1.7以上的Java版本都是支持的。

    下载latest release of Hotswap agent jar,解压hotswap-agent.jar,解压内容可以放在你的硬盘上的任何位置(例如,C:\java\hotswap-agent.jar)。

    运行你的应用程序

    1.添加接下来的命令行java属性:-XXaltjvm=dcevm -javaagent:PATH_TO_AGENT\hotswap-agent.jar(你需要用实际的路径替换PATH_TO_AGENT)。比如java路径,那么就是-XXaltjvm=dcevm -javaagent:c:\java\hotswap-agent.jar。想要了解更多的IDE具体的设置指南,可以查看IntelliJ IDEA 和 Netbeans 论坛上的线索。如果你的应用已经在运行了,你仍可以使用示例code snippet来附加agent jar包。

    2.(可做可不做)在你的资源路径中创建一个名为”hotswap-agent.properties”的文件,想要查看可用的属性和默认值:可以参阅https://github.com/HotswapProjects/HotswapAgent/blob/master/hotswap-agent-core/src/main/resources/hotswap-agent.properties。

    3.在debug模式下启动应用程序,并参考一下来检测代理和插件是否被正确初始化:

    HOTSWAP AGENT9:49:29.548 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent -unlimited runtime class redefinition.

    HOTSWAP AGENT9:49:29.725 INFO (org.hotswap.agent.config.PluginRegistry) - Discovered plugins:[org.hotswap.agent.plugin.hotswapper.HotswapperPlugin,org.hotswap.agent.plugin.jvm.AnonymousClassPatchPlugin,org.hotswap.agent.plugin.hibernate.HibernatePlugin, org.hotswap.agent.plugin.spring.SpringPlugin,org.hotswap.agent.plugin.jetty.JettyPlugin, org.hotswap.agent.plugin.tomcat.TomcatPlugin,org.hotswap.agent.plugin.zk.ZkPlugin, org.hotswap.agent.plugin.logback.LogbackPlugin]

    ...

    HOTSWAP AGENT9:49:38.700 INFO (org.hotswap.agent.plugin.spring.SpringPlugin) - Spring plugininitialized - Spring core version '3.2.3.RELEASE'


    4.保存某个被修改了的资源,和/或 使用你IDE的HotSwap特性来重新加载被修改了的内容。

    配置

    做完那些基本配置后,就可以从classpath着手重新加载类和资源了,该classpath已被运行时应用程序(classloader类加载器)所知。如果你需要一个不同的配置,可以添加hotswap-agent.properties文件到classpath的根路径(比如,src/main/resources/hotswap-agent.properties)。

    可用属性和默认值的详细文档可以在agent properties file中找到。

    Hotswap agent命令行参数

    命令行参数的完整语法是:

    -javaagent:[yourpath/]hotswap-agent.jar=[option1]=[value1],[option2]=[value2]

    Hotswap agent 接受如下的参数:

    • autoHotswap=true – 监测所有随时可能修改的类文件,并在运行着的应用程序中自动热交换 类(而不是从你的IDE调试窗口运行热交换)。

    • disablePlugin=[pluginName] – 禁止一个插件.注意这个参数会完全禁止插件去加载(hotswap-agent.properties文件中的disablePlugin参数只会为类加载器禁用插件, 这两个参数的作用是相反的。你对每个插件重复使用这个参数可以达到禁止插件的目的)。

    使用许可

    HotswapAgent遵循GPL-2.0开源协议发布。

    开源地址:https://github.com/HotswapProjects/HotswapAgent

  • 相关阅读:
    hdu 4707 Pet
    hdu 3584 Cube (三维树状数组)
    poj 2155 Matrix (树状数组)
    poj 1195 Mobile phones (树状数组)
    工厂方法模式
    简单工厂模式
    关于设计模式
    UML类图
    UML
    【转载】UML用例图
  • 原文地址:https://www.cnblogs.com/enncloudcn/p/6846387.html
Copyright © 2011-2022 走看看