1概要

このチュートリアルでは、Spring

でシャットダウンコールバックを使用する

さまざまな方法を学びます。

シャットダウンコールバックを使用する主な利点は、適切なアプリケーション出口を制御できることです。


2シャットダウンコールバックアプローチ

Springは、コンポーネントレベルとコンテキストレベルの両方のシャットダウンコールバックをサポートしています。これらのコールバックは以下のようにして作成できます。


  • @ PreDestroy


  • DisposableBean

    インターフェース

  • ビーン破壊法

  • グローバル

    ServletContextListener

例を挙げて、これらすべてのアプローチを見てみましょう。


2.1.

@ PreDestroy


を使う


@ PreDestroy

を使用するBeanを作成しましょう。

@Component
public class Bean1 {

    @PreDestroy
    public void destroy() {
        System.out.println(
          "Callback triggered - @PreDestroy.");
    }
}

Beanの初期化中に、Springは

@ PreDestroy

のアノテーションが付けられたすべてのBeanメソッドを登録し、アプリケーションのシャットダウン時にそれらを呼び出します。


2.2.

DisposableBean

インタフェースを使用する

2番目のBeanは、シャットダウンコールバックを登録するために

DisposableBean

インタフェースを実装します。

@Component
public class Bean2 implements DisposableBean {

    @Override
    public void destroy() throws Exception {
        System.out.println(
          "Callback triggered - DisposableBean.");
    }
}


2.3. Bean破棄メソッドの宣言

このアプローチでは、まずカスタムのdestroyメソッドを使ってクラスを作成します。

public class Bean3 {

    public void destroy() {
        System.out.println(
          "Callback triggered - bean destroy method.");
    }
}

次に、Beanを初期化し、その

destroy()

メソッドをシャットダウンコールバックとしてマークする設定クラスを作成します。

@Configuration
public class ShutdownHookConfiguration {

    @Bean(destroyMethod = "destroy")
    public Bean3 initializeBean3() {
        return new Bean3();
    }
}

destroyメソッドを登録するXMLの方法は次のとおりです。

<bean class="com.baeldung.shutdownhooks.config.Bean3"
  destroy-method="destroy">


2.4. グローバル

ServletContextListener


の使い方

コールバックをBeanレベルで登録する他の3つの方法とは異なり、

ServletContextListener

はコールバックをコンテキストレベルで登録します。

そのために、カスタムコンテキストリスナを作成しましょう。

public class ExampleServletContextListener
  implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println(
          "Callback triggered - ContextListener.");
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {
       //Triggers when context initializes
    }
}

構成クラスの

ServletListenerRegistrationBean

に登録する必要があります。

@Bean
ServletListenerRegistrationBean<ServletContextListener> servletListener() {
    ServletListenerRegistrationBean<ServletContextListener> srb
      = new ServletListenerRegistrationBean<>();
    srb.setListener(new ExampleServletContextListener());
    return srb;
}


3結論

Springがシャットダウンコールバックを登録するために提供する、Beanレベルとコンテキストレベルの両方でのさまざまな方法について学びました。

これらは、アプリケーションを適切にシャットダウンし、使用されたリソースを効果的に解放するために使用できます。

いつものように、この記事で言及されている例はすべてhttps://github.com/eugenp/tutorials/tree/master/spring-boot[over on Github]にあります。