2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Springでコンポーネントの起動・停止処理を実装する

Last updated at Posted at 2022-07-03

Springでコンポーネントの起動・停止処理(初期化・破棄処理)を実装する方法を調べてみました。

SmartLifecycleを実装する

起動・停止処理という切り口の場合は、SmartLifecycleを利用するのが良さげっぽい。DIコンテナ起動時にstartメソッドが呼び出され、DIコンテナ停止時にstopメソッドが呼び出される。

@Component
public class MyComponent implements SmartLifecycle {
  private boolean active;

  @Override
  public void start() {
    System.out.println("start " + getClass());
    this.active = true;
  }

  @Override
  public void stop() {
    System.out.println("stop " + getClass());
    this.active = false;
  }

  @Override
  public boolean isRunning() {
    return active;
  }
}

getPhaseメソッドをオーバライドすれば、起動・停止する順番(フェーズ)を制御することもできる。起動時は数値が小さいコンポーネントのメソッドから順に呼び出され、停止時は数値が大きいコンポーネントのメソッドから順に呼び出される。

  @Override
  public int getPhase() {
    return 0;
  }

Lifecycleインタフェースを実装することで同じようなことはできるが順序(フェーズ)のサポートはない。

InitializingBean/DisposableBeanを実装する

InitializingBean/DisposableBeanを実装することで同じようなことできそうだが、起動・停止処理というよりかは、コンポーネントの初期化・破棄処理を実装するためのインターフェースなので役割がちょっと違う気はします。

@Component
public class MyComponent implements InitializingBean, DisposableBean {
  @Override
  public void afterPropertiesSet() throws Exception {
    System.out.println("afterPropertiesSet " + getClass());
  }

  @Override
  public void destroy() throws Exception {
    System.out.println("destroy " + getClass());
  }
}  

まとめ

上記以外にも初期化・破棄処理を実装・実行する方法はありますが、今回はあえてSpringが提供するインタフェースを実装する方法に限定してみました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?