7

我正在寻找一个拦截器或触发器来知道,所有上下文 bean 都被销毁并且 applicationcontext 实例即将自行销毁。所以我可以在应用程序生命周期结束时执行一个进程。

有这个事件类型 ContextClosedEvent,它与我想做的事情很接近,但是它会在销毁 bean后引发事件。我认为它带有 applicationcontext 的 close() 方法。所以它不适合我的需要

有任何想法吗?

问候

阿里

4

2 回答 2

4

您可以使用抽象应用程序上下文类的 registerShutDownHook() 方法。有关更多详细信息,请查看此。

更新

然后,您应该在 spring 上下文即将销毁时在最后要运行某些东西的方法之上尝试 @PreDestroy 注释。

希望这对您有所帮助。干杯。

于 2012-06-06T03:15:12.657 回答
0

创建一个实现 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;
        }

    }
于 2019-10-08T12:17:34.093 回答