Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

backpaper0/spring-boot-async-with-web-trigger-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring BootでWebエンドポイントをトリガーにして非同期処理を呼び出す

概要

次のcurlコマンドで処理を実行できる。 日時を渡しているが、処理対象のデータを抽出するときなどには処理内部で取得したシステム日付を使用するよりも、外部から渡されたパラメーターを使用する方がテストしやすい。 また、特定日時に対してアドホックに処理したい場合にも役立つ。

curl localhost:8080/fire -X POST -d dateTime=2020-03-13T06:02:59

コントローラーから非同期処理が呼び出されて、次のようなログが標準出力へ出る。

[start] trigger
[end] trigger
[start] batch process
parameter = 2020-03-13T06:02:59
[end] batch process

ちなみにコントローラーと非同期処理ではトランザクションが別れるので、コントローラーはあくまでも非同期処理を呼び出すだけに留めてDBアクセスはしない方が安全。

Springの非同期処理

まず非同期処理を有効化する。 メインクラスに@EnableAsyncを付ければOK。

それから非同期にしたいメソッドに@Asyncを付ける。 引数はそのまま受け取れる。

戻り値は少しルールがある。 今回は戻り値がないのでvoidにしているけれど、戻り値がある場合はjava.util.concurrent.Futureで宣言する。 メソッドの実装としては返す値をorg.springframework.scheduling.annotation.AsyncResultで包めばよい。

こんな感じ。

@Async
public Future<String> asyncMethod() {
    String result = longLongTimeProcess();
    return AsyncResult.forValue(result);
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages