我正在寻找一个拦截器或触发器来知道,所有上下文 bean 都被销毁并且 applicationcontext 实例即将自行销毁。所以我可以在应用程序生命周期结束时执行一个进程。
有这个事件类型 ContextClosedEvent,它与我想做的事情很接近,但是它会在销毁 bean后引发事件。我认为它带有 applicationcontext 的 close() 方法。所以它不适合我的需要
有任何想法吗?
问候
阿里
我正在寻找一个拦截器或触发器来知道,所有上下文 bean 都被销毁并且 applicationcontext 实例即将自行销毁。所以我可以在应用程序生命周期结束时执行一个进程。
有这个事件类型 ContextClosedEvent,它与我想做的事情很接近,但是它会在销毁 bean后引发事件。我认为它带有 applicationcontext 的 close() 方法。所以它不适合我的需要
有任何想法吗?
问候
阿里
您可以使用抽象应用程序上下文类的 registerShutDownHook() 方法。有关更多详细信息,请查看此。
更新
然后,您应该在 spring 上下文即将销毁时在最后要运行某些东西的方法之上尝试 @PreDestroy 注释。
希望这对您有所帮助。干杯。
创建一个实现 SmartLifecycle 的 bean,getPhase 返回 Integer.MAX_VALUE。它的 stop() 方法将在任何其他停止或销毁方法之前执行。您可以在那里对活豆中的所有资源进行清理。
@Component
public class Terminator implements SmartLifecycle {
private boolean started = true;
@Override
public void stop() {
// CLEANUP CODE
}
@Override
public void stop(Runnable callback) {
stop();
callback.run();
}
@Override
public int getPhase() {
return Integer.MAX_VALUE;
}
@Override
public boolean isAutoStartup() {
return true;
}
@Override
public boolean isRunning() {
return started;
}
}