Spring Bootで非同期処理を行う方法をメモしておきます。Spring Bootでは、非同期処理用のアノテーション@Async
が用意されているので、非同期処理が比較的簡単に実装できます。
環境
Spring Bootで@Async
を使って非同期処理を行う方法
非同期処理を試すために、簡単なコマンドラインアプリケーションを作成してみます。Spring Bootでコマンドラインアプリケーションを作成する方法については、以下記事をご覧ください。
Spring Bootで簡単なコマンドラインアプリケーションを作成してみる - Reasonable Code
それではさっそく作っていきましょう。
build.gradle
については、特に非同期処理用のなにかを追加する必要はありません。
build.gradle
スレッドプールの設定を行う
以下は非同期処理のスレッドプールの設定を行うクラス(AsyncConfig.java
)です。Bean登録して利用します。
AsyncConfig.java
非同期処理を実装する
以下が非同期処理を行うクラス(DemoService.java
)です。非同期処理を行いたいクラスやメソッドに@Async
を付与します。簡単ですね。
戻り値のCompletableFuture
については、呼び出し元で非同期処理のハンドリング(非同期処理の戻り値を取得する、複数の非同期処理の待ち合わせを行う、など)を行うために利用します。もともとの戻り値をCompletableFuture
でラップしてあげればOKです。
DemoService.java
以下が非同期処理を呼び出すクラス(DemoApplication.java
)です。非同期処理を有効化するために、アプリケーションクラスに@EnableAsync
を付与します。以下の例だと、demoService.printName()
をそれぞれ非同期で呼び出しています。
DemoApplication.java
最後にアプリケーションを実行してみます。非同期で処理されているのがわかりますね。
まとめ
Spring Bootで@Async
を使って非同期処理を行う方法でした。ポイントをまとめます。
- 非同期処理を行うクラスやメソッドに
@Async
を付与する - アプリケーションクラスに
@EnableAsync
を付与する CompletableFuture
を利用して非同期処理のハンドリングを行う- スレッドプールの設定クラスをBean登録する