Spring Bootでparallelや@EnableAsyncで非同期処理や並列処理を実装する

Spring Bootでparallelや@EnableAsyncで非同期処理や並列処理を実装する

Stream APIで並列処理を実装する

Java8以上の場合、stream apiでparallelメソッドで並列実行することが出来ます。

parallelメソッドは並列処理ですので非同期処理とは異なります。

以下ソースは、指定秒数かかるAPIを2回実行していますが、並列実行しているので指定秒数強で実行ができます。

Spring5ではAsyncRestTemplateは非推奨となっているようです。

https://spring.pleiades.io/spring/docs/current/javadoc-api/deprecated-list.html

@EnableAsync,@Asyncアノテーションを使用して非同期処理を実装する

Spring Bootで非同期処理を実装するには@EnableAsyncアノテーションを使用します。

起動クラスに@EnableAsyncアノテーションを付与します。これで@Asyncアノテーションを付与したメソッドが非同期で実行されるようになります。

コントローラから非同期処理をするasyncメソッドを3回呼び出しています。指定秒数かかるメソッドです。

@Asyncアノテーションが付与されたメソッドは別スレッドで実行されます。以下サービスクラスです。

package jp.co.confrage.presentation.service;
import java.util.concurrent.CompletableFuture;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
/**
* 非同期処理
*
* @param seconds
* @return
* @throws InterruptedException
*/
@Async
public CompletableFuture<String> async(String seconds) throws InterruptedException {
Thread.sleep(Long.valueOf(seconds) * 1000L);
return CompletableFuture.completedFuture(seconds + "秒かかる処理");
}
}

view raw
DemoService.java
hosted with ❤ by GitHub

以下実行例です。

@Asyncアノテーションをコメントアウトした場合の実行例です。同期処理されるため、実行時間がかかっています。

以下サイトによるとorg.springframework.core.task.TaskExecutorクラスで色々調整が可能です。

また、実行可能jarでもwarでも実装可能です。

https://spring.pleiades.io/guides/gs/async-method/

サンプルコード

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA