Spring

Spring Bootで@Asyncを使って非同期処理を行う方法

Spring Bootで非同期処理を行う方法をメモしておきます。Spring Bootでは、非同期処理用のアノテーション@Asyncが用意されているので、非同期処理が比較的簡単に実装できます。

環境

Spring Bootで@Asyncを使って非同期処理を行う方法

非同期処理を試すために、簡単なコマンドラインアプリケーションを作成してみます。Spring Bootでコマンドラインアプリケーションを作成する方法については、以下記事をご覧ください。
Spring Bootで簡単なコマンドラインアプリケーションを作成してみる - Reasonable Code

それではさっそく作っていきましょう。

build.gradleについては、特に非同期処理用のなにかを追加する必要はありません。

build.gradle

スレッドプールの設定を行う

以下は非同期処理のスレッドプールの設定を行うクラス(AsyncConfig.java)です。Bean登録して利用します。スレッドプールの設定については、以下記事が詳しいです。
BLOG.IK.AM

AsyncConfig.java

非同期処理を実装する

以下が非同期処理を行うクラス(DemoService.java)です。非同期処理を行いたいクラスやメソッドに@Asyncを付与します。簡単ですね。

戻り値のCompletableFutureについては、呼び出し元で非同期処理のハンドリング(非同期処理の戻り値を取得する、複数の非同期処理の待ち合わせを行う、など)を行うために利用します。もともとの戻り値をCompletableFutureでラップしてあげればOKです。

DemoService.java

以下が非同期処理を呼び出すクラス(DemoApplication.java)です。非同期処理を有効化するために、アプリケーションクラスに@EnableAsyncを付与します。以下の例だと、demoService.printName()をそれぞれ非同期で呼び出しています。

DemoApplication.java

最後にアプリケーションを実行してみます。非同期で処理されているのがわかりますね。

まとめ

Spring Bootで@Asyncを使って非同期処理を行う方法でした。ポイントをまとめます。

  • 非同期処理を行うクラスやメソッドに@Asyncを付与する
  • アプリケーションクラスに@EnableAsyncを付与する
  • CompletableFutureを利用して非同期処理のハンドリングを行う
  • スレッドプールの設定クラスをBean登録する

参考リンク


-Spring

Copyright© Reasonable Code , 2020 All Rights Reserved.