Edited at

Springの@Asyncが便利すぎて鼻血でた

More than 1 year has passed since last update.

バタバタしているので後で見返せるようにザクッとメモ


ポイント


  • デフォルトでは@Asyncによる非同期処理が機能しないので@EnableAsyncをつける


  • @Service内のメソッドやクラス単位で@Asyncを付与。これだけでその部分を非同期処理にすることができる。

  • ExecutorをリターンするgetAsyncExecutorメソッドをオーバーライドすることで設定が書ける

@Async // コメントアウトすると、メインスレッドで実行されるようになります。非同期処理はなされなくなりますが、コンパイルエラーにはなりません。

public Future<User> findUser(String user) throws InterruptedException {
logger.info("Looking up " + user);
String url = String.format("https://api.github.com/users/%s", user);
User results = restTemplate.getForObject(url, User.class);

// 非同期処理を並列実行することによって、処理時間が短縮されることを分かりやすくするための sleep です。
Thread.sleep(1000L);
return new AsyncResult<>(results);
}

関係ないけど参考記事のこの部分を見て、未だ利用したことのないRestTemplateに俄然興味を持った。

機会があればいじってみたい。ストックとして面白そうな記事を載せておく。


参考記事

Spring Boot における非同期処理

Springの@Asyncで非同期処理をする

Springbootで非同期処理はとっても簡単

Javaの並列化コードサンプル集(MPSDやMPMDの並列化あたりはThread、Runnableの参考にできる)

さあ、並列プログラミングをはじめよう(ExecutorはThreadの上位互換っぽい)

非同期処理にはThreadを直接使わずにExecutorServiceを使用する


ストック

SpringのRestTemplateが便利すぎて鼻血でた