我正在寻找一个拦截器或触发器来知道,所有上下文bean都被销毁,而applicationcontext实例即将自行销毁。所以我可以在应用程序生命周期结束时执行一个过程。
有一个事件类型ContextClosedEvent,它接近我想做的事情,但是它会在销毁bean之后抛出事件。我认为它与applicationcontext的close()方法有关。所以它不符合我的需要
有什么想法吗?
此致
阿里
答案 0 :(得分:3)
您可以使用抽象应用程序上下文类的registerShutDownHook()方法。有关详细信息,请查看this.
<强>更新强>
然后你应该在Spring弹性上下文即将破坏的时候在你想要运行的方法的顶部尝试@PreDestroy注释。
希望这会对你有所帮助。欢呼声。
答案 1 :(得分:0)
创建一个实现SmartLifecycle的bean,其getPhase返回Integer.MAX_VALUE。 它的stop()方法将在其他任何stop或destroy方法之前执行。 您可以在那里清理活豆中的所有资源。
@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;
}
}