TimerTrigger/SpringBatch

TimerTriggerによって動作するAzure Function上でSpring Batch(Taskletモデル)を利用してみた

Timer Triggerによって、一定時間が来たタイミングでAzure Functionsが動作するアプリケーションを生成できるが、そのバッチ処理内部で、Spring Batchを利用することもできる。

今回は、Azure Functions上でTimerTriggerによって動作するJavaアプリケーション(Spring Boot上)でSpring Batchを利用してみたので、そのサンプルプログラムを共有する。

なお、Spring BatchにはChunkモデルとTaskletモデルがあるが、今回はTaskletモデルを利用している。Spring Batchのアーキテクチャについては、以下のサイトを参照のこと。
https://terasoluna-batch.github.io/guideline/5.0.0.RELEASE/ja/Ch02_SpringBatchArchitecture.html

前提条件

下記記事のサンプルプログラムを作成済であること。

Azure FunctionsでJavaアプリケーション(Spring Boot上)のLogbackでのログを確認してみたこれまで、Azure Functionsの関数の「モニター」で何度かログを確認したことがあったが、この方法だと、Spring Bootプ...



作成したサンプルプログラムの修正

前提条件の記事のサンプルプログラムに、Spring Batchの処理を追加する。なお、下記の赤枠は、前提条件のプログラムから大きく変更したり、追加したりしたプログラムである。
サンプルプログラムの構成

pom.xmlへの追加内容は以下の通りで、Spring Batchを利用するためのライブラリを追加している。

また、メインクラスの内容は以下の通りで、Spring Batch内で行われるデータソースの自動設定を除外している。

さらに、サービスクラスの内容は以下の通りで、Spring Batchのジョブを起動する設定を追加している。



また、Spring Batchの起動定義は以下の通りで、バッチジョブに処理(Tasklet)とその前後処理(Listener)を追加している。

さらに、Spring Batchのジョブ内での処理(Tasklet)を定義しているクラスの内容は、以下の通り。



また、Spring Batchのジョブの前後で実施する処理(Listener)を定義を定義しているクラスの内容は、以下の通り。

その他のソースコード内容は、以下のサイトを参照のこと。ただし、TimerTriggerParamからLoggerのBean定義を削除している。
https://github.com/purin-it/azure/tree/master/azure-functions-spring-batch-tasklet/demoAzureFunc

また、その後のビルドとデプロイ手順については、前提条件の記事を参照のこと。



サンプルプログラムの実行結果(ローカル)

「mvn azure-functions:run」で実行した結果は以下の通りで、赤枠のログを確認すると、TimerTriggerTestHandler⇒TimerTriggerService⇒DemoJobListener⇒DemoTasklet の順に呼び出されることが確認できる。
ローカル環境での実行結果



サンプルプログラムの実行結果(Azure上)

サンプルプログラムを変更後、Application Insightsでログを確認した結果は以下の通りで、TimerTriggerTestHandler⇒TimerTriggerService⇒DemoJobListener⇒DemoTasklet の順に呼び出されることが確認できる。
Azure環境での実行結果

なお、Application Insightsでのログ確認手順は、以下の記事の「サンプルプログラムの実行結果(Azure上)」の項番6以降を参照のこと。

Azure FunctionsでJavaアプリケーション(Spring Boot上)のLogbackでのログを確認してみたこれまで、Azure Functionsの関数の「モニター」で何度かログを確認したことがあったが、この方法だと、Spring Bootプ...

要点まとめ

  • TimerTriggerによって動作するAzure Function内のバッチ処理内部で、Spring Batchを利用することもできる。
  • Spring BatchのTaskletモデルでは、処理(Tasklet)とその前後処理(Listener)からなるジョブを定義する。