看看HotswapAgent,Java 无限运行时类和资源重新定义。
下载dcevm和最新的 hotswap -agent-core.jar并使用java --javaagent:c:\java\hotswap-agent-core.jar YourApp
.
添加 HotswapAgent 依赖:
<dependency>
<groupId>org.hotswapagent</groupId>
<artifactId>hotswap-agent-core</artifactId>
<version>1.3.0</version>
<scope>provided</scope>
</dependency>
您还需要 Hotswap Agent 插件来重新加载 Spring 和其他 bean/缓存:
<dependency>
<groupId>org.hotswapagent</groupId>
<artifactId>hotswap-agent-plugins</artifactId>
<version>1.3.0</version>
<type>pom</type>
</dependency>
编写你的插件类:
@Plugin(name = "TriggerHotswapPlugin")
public class TriggerHotswapPlugin {
@OnClassLoadEvent(classNameRegexp = ".*", events = LoadEvent.REDEFINE)
public static void onAnyReload() {
.. synchronization mechanism with your class .. ;
}
@OnResourceFileEvent(path = "/", filter = ".*.resource")
public void onResourceChanged() {
.. synchronization mechanism with your class .. ;
}
}
创建 hotswap-agent.properties
pluginPackages=your.plugin.package
作为替代方案,您可以创建简单的 javaagent 来触发 hotswap,但无论如何您都需要 java classess 的完整 hotswap,为什么不编写自定义 hotswap 代理插件。