さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

SpringBootでアプリケーション起動時と停止時に処理を行う方法

目次

1.概要  

Webアプリを開発している際に、アプリ起動時と停止時になんらかしらの処理を入れたいと思うときがあります。(たとえば、DBのコネクションを破棄したりなど。。。)
 
今回はSpringBootを使用してこれを実現するやり方をまとめました。
 
んで、やり方としては複数パターンあるのですが、
今回はSpringらしく?アノテーションを使用して実現したものを載せます。
 
以下にざっくりですが記述がありますので参考にさせていただきます。
 

2.実装手順

まずは、起動時と停止時に呼ばれる処理を管理するためのクラスを作ります。
 

2-1.起動と停止時に呼び出されるメソッドを定義したクラスを作成する。

以下に記載されている@PostConstructと@PreDestroyを付与したメソッドの呼び出しタイミングはSpringBootにてBeanの作成後と破棄前管理しているのでクラス名は BeanLifeCycleとでもしておきます。
 
BeanLifeCycle.java
package sample;
 
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
 
import org.springframework.cassandra.config.CassandraCqlClusterFactoryBean;
import org.springframework.cassandra.config.CassandraCqlSessionFactoryBean;
import org.springframework.stereotype.Component;
 
/**
 * アプリケーションのBeanライフサイクルを管理する
 *
 * @author saiki-y
 *
 */
@Component
public class BeanLifeCycle {
 
     /**
     * Beanコンテキスト生成後に呼び出される
     */
     @PostConstruct
     public void initAfterStartup() {
 
          //起動時の処理を記述
          System.out.println("initAfterStartup ");
     }
 
     /**
     * Beanコンテキスト破棄前に呼び出される
     */
     @PreDestroy
     public void cleanupBeforeExit() {
 
          //停止時の処理を記述
          System.out.println(" cleanupBeforeExit ");
     }
 
}
 

2-2.Config用のクラスに設定する。

作成したコンポーネントをあとはAppConfigクラスに定義すれば完成です。
 
AppConfig.java
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
 
     ・・・省略
 
     /**
     * Beanライフサイクル管理インスタンスをアプリケーション起動時にシングルトン生成
     *
     * @return BeanLifeCycle
     */
     @Bean
     public RpBeanLifeCycle BeanLifeCycle() {
 
          return new BeanLifeCycle();
 
     }
}
 
これでWebアプリケーションの起動時にinitAfterStartupメソッド、停止時にcleanupBeforeExitメソッドが呼ばれるようになります。
 
以上