TimerTrigger/SpringBatch

Azure Functions上でTimerTriggerによって動作するJavaアプリケーション(Spring Boot上)を作成してみた

これまでは、HTTPリクエストによりAzure Functionsが動作するアプリケーションのみ作成してきたが、Timer Triggerによって、一定時間が来たタイミングでAzure Functionsが動作するアプリケーションも作成することができる。

今回は、Azure Functions上でTimerTriggerによって動作するJavaアプリケーション(Spring Boot上)を作成してみたので、共有する。

前提条件

下記記事のBlob Storageの作成が完了していること。

Azure Blob Storageを作成しファイルを格納してみたAzure Blob Storageを利用すると、Azure上にBlobデータ(テキストファイルや画像、アーカイブファイル等)を格納する...

また、下記記事に従ってAzure Functionsのサンプルプログラムを作成済であること。

Azure Functions上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でAzure Functionsを作成してみたが、今回は、前回作成したAzure FunctionsにS...

作成したサンプルプログラムの内容

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成

pom.xmlの内容は以下の通りで、Lombokを追加している以外は、一般的なAzure Functionsの場合と同じ設定になっている。



また、host.json、local.settings.jsonの内容は以下の通り。

なお、local.settings.jsonの「AzureWebJobsStorage」は、HTTP Trigger以外では指定が必要になるため、Azure Storageのアカウント名・アカウントキーを指定している。アカウントキーは、Azure Storageの以下の画面で確認できるようになっている。
AzureStorageキー

また、TimerTriggerのサービスクラス、Paramクラス、Resultクラスの内容は以下の通りで、サービスクラスが呼び出されたタイミングで、ログ出力するようになっている。なお、Azure上でFunctionsのログが出力できるよう、ログ出力時に、Paramクラスに追加したログ出力クラスを利用している。



さらに、メインクラスの内容は以下の通りで、TimerTriggerのサービスクラスのファンクション定義を追加している。

また、TimerTriggerイベントが発生したタイミングで呼ばれるハンドラークラスの内容は以下の通りで、TimerTriggerのサービスクラスを呼び出している。

なお、上記クラスでは、1分毎にTimerTriggerイベントが発生するようになっている。TimerTriggerイベントの発生タイミングの記載方法については、以下のサイトの「NCRONTAB式」を参照のこと。
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-timer?tabs=java#ncrontab-expressions



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

先ほど作成したアプリケーションを、ローカル環境で実行する方法と実行結果は、以下の通り。

1) コマンドプロンプトを起動し、作成したアプリケーションのpom.xmlの存在するディレクトリに移動する。
サンプルプログラムの実行結果(ローカル)_1

2) 「mvn clean」コマンドを実行し、デプロイされたjarファイルが含まれるtarget ディレクトリ内をクリアする。
サンプルプログラムの実行結果(ローカル)_2

3) 「mvn package」コマンドを実行し、デプロイ用のjarファイルを作成する。
サンプルプログラムの実行結果(ローカル)_3

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

なお、上記画像では、コピーしている箇所を一部省略している。

4) 「mvn azure-functions:run」コマンドを実行し、Azure Functiosを実行する。
サンプルプログラムの実行結果(ローカル)_4

5) 1分後以内に、以下の赤枠の、ハンドラークラスとサービスクラスのログが出力されることが確認できる。
サンプルプログラムの実行結果(ローカル)_5

6) さらに1分後に、以下の赤枠の、ハンドラークラスとサービスクラスのログが出力されることが確認できる。
サンプルプログラムの実行結果(ローカル)_6

7) Azure Functionsを終了するには、「Ctrl+C」コマンドで「バッチジョブを終了しますか(Y/N)?」というメッセージが表示されるので、「Y」を選択しエンターキーを押下する。
サンプルプログラムの実行結果(ローカル)_7



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

Azure FunctionsへのSpring Bootを利用したJavaアプリケーションのデプロイ方法と実行結果は、以下の通り。なお、「az login」コマンドによるログインは既に実施済とする。

1) 「mvn azure-functions:deploy」コマンドを実行し、jarファイルをAzure Functionsにデプロイする。
サンプルプログラムの実行結果(Azure上)_1

また、一定時間経過後にログ確認を行うため、Azure Portalにログイン後、以下の操作を行う。

2) Azure Functionsの概要を表示した状態で「関数」メニューを押下する。
サンプルプログラムの実行結果(Azure上)_2

3) デプロイした関数名のリンクを押下する。
サンプルプログラムの実行結果(Azure上)_3

4) 「モニター」メニューを押下する。
サンプルプログラムの実行結果(Azure上)_4

5) ログの一覧が表示されるため、最新のログを選択する。
サンプルプログラムの実行結果(Azure上)_5

6) ログに、以下の赤枠の、ハンドラークラスとサービスクラスのログが出力されることが確認できる。
サンプルプログラムの実行結果(Azure上)_6

要点まとめ

  • Azure Functions上では、Timer Triggerによって、一定時間が来たタイミングでAzure Functionsが動作するアプリケーションも作成することができる。
  • Timer Triggerアノテーションのschedule属性で、TimerTriggerイベントの発生タイミングを指定できる。