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

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/enncloudcn/p/6846387.html
Copyright © 2011-2022 走看看