7

すべてのコンテキスト Bean が破棄され、applicationcontext インスタンスがそれ自体を破棄しようとしていることを知るためのインターセプターまたはトリガーを探しています。したがって、アプリケーションの有効期間の終わりに 1 つのプロセスを実行できます。

このイベント タイプ ContextClosedEvent があります。これは私がやりたいことに近いですが、Bean の破棄後にイベントをスローします。applicationcontext の close() メソッドに付属していると思います。だから私のニーズには合わない

何か案は?

よろしく

アリ

4

2 に答える 2

4

抽象アプリケーション コンテキスト クラスの registerShutDownHook() メソッドを使用できます。詳細については、こちらをご覧ください

アップデート

次に、Spring コンテキストが破棄されようとしているときに最後に何かを実行したいメソッドの上に @PreDestroy アノテーションを試す必要があります。

これがお役に立てば幸いです。乾杯。

于 2012-06-06T03:15:12.657 に答える
0

Integer.MAX_VALUE を返す getPhase を使用して、SmartLifecycle を実装する Bean を作成します。その stop() メソッドは、他の stop または destroy メソッドの前に実行されます。生きている Bean のすべてのリソースでクリーンアップを行うことができます。



    @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 に答える