奇怪的问题--但我想知道我该如何写代码来简单地说:“自从我上次检查之后,intellij有没有热交换过的类?”
为什么?
出于邪恶的历史原因-- springcontext需要2-3分钟才能启动,这意味着如果你只想运行一个测试,那就需要2-3分钟的等待时间。如果你是一个TDD的人,想要写一点,运行,写一点,运行-这是行不通的。加快springcontext加载显然是理想的,但远远超出了我所拥有的时间,因为一切都是一团糟--我想的只是做一个junit测试,这是一个无限循环:
while true
try {run the actual test;show success} catch {show error}
wait until code is hot swapped
因此,在很多情况下,某人只需编写一点代码,按下build键-它将立即再次运行,而无需重新加载上下文-将2-3分钟的延迟降低到不到1秒。
发布于 2018-05-17 02:36:35
看看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>
你还需要热插拔代理插件来重新加载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来触发热交换,但是无论如何你都需要完整的热交换java类,为什么不编写自定义的热交换代理插件呢?
https://stackoverflow.com/questions/48178609
复制相似问题