有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在寻找一个拦截器或触发器,以了解所有上下文bean都已销毁,applicationcontext实例即将销毁自身。因此,我可以在应用程序生命周期结束时执行一个进程

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

有什么想法吗

问候

阿里


共 (2) 个答案

  1. # 1 楼答案

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

    更新

    然后,您应该在方法的顶部尝试@PreDestroy注释,当spring上下文即将破坏时,您希望在该方法上运行某些东西

    希望这对你有帮助。干杯

  2. # 2 楼答案

    创建一个实现SmartLifecycle的bean,getPhase返回整数。最大值。 它的stop()方法将在任何其他stop或destroy方法之前执行。 你可以在那里清理LivingBean中的所有资源

    
    
    
        @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;
            }
    
        }