在销毁ApplicationContext之前立即触发的Spring关闭事件?

时间:2012-06-05 18:27:28

标签: java spring destroy applicationcontext

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

有一个事件类型ContextClosedEvent,它接近我想做的事情,但是它会在销毁bean之后抛出事件。我认为它与applicationcontext的close()方法有关。所以它不符合我的需要

有什么想法吗?

此致

阿里

2 个答案:

答案 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;
        }

    }