これまでは、TimerTriggerイベントが発生するタイミングを、Javaのソースコード内で直接指定してきたが、この指定は環境変数で設定することもできる。
今回は、TimerTriggerイベントが発生するタイミングを環境変数で設定してみたので、共有する。
前提条件
下記記事のNCRONTAB式のタイムゾーン変更が完了していること。
環境変数の設定
ローカル環境でTimerTriggerイベントの動作検証を行うために、環境変数の値を設定する。以下では、環境変数「ScheduleAppSetting」に、1分毎にTimerTriggerイベントが発生するスケジュールを設定している。
なお、環境変数の設定方法は、以下のサイトを参照のこと。
https://www.scc-kk.co.jp/scc-books/java8_workbook/java_dev-win10.html
作成したサンプルプログラムの修正
前提条件の記事で利用しているサンプルプログラムを、TimerTriggerイベントが発生するタイミングを環境変数から取得するように修正する。なお、下記の赤枠は、前提条件の記事で利用しているプログラムから変更した箇所を示している。
修正したTimerTriggerイベントが発生したタイミングで呼ばれるハンドラークラスの内容は以下の通りで、TimerTriggerイベントが発生するタイミングを「ScheduleAppSetting」から取得するように修正している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package com.example; import org.springframework.cloud.function.adapter.azure.FunctionInvoker; import com.example.model.TimerTriggerParam; import com.example.model.TimerTriggerResult; import com.microsoft.azure.functions.ExecutionContext; import com.microsoft.azure.functions.annotation.FunctionName; import com.microsoft.azure.functions.annotation.TimerTrigger; public class TimerTriggerTestHandler extends FunctionInvoker<TimerTriggerParam, TimerTriggerResult>{ /** * TimerTriggerによって、DemoAzureFunctionクラスのtimerTriggerTestメソッドを呼び出す. * @param timerInfo TimerTriggerイベント情報 * @param context コンテキストオブジェクト */ // 「schedule = "%ScheduleAppSetting%"」で、環境変数「ScheduleAppSetting」で指定した // タイミングで、TimerTriggerイベントが発生するようになっている @FunctionName("timerTriggerTest") public void timerTriggerTest(@TimerTrigger(name = "timerTriggerTest" , schedule = "%ScheduleAppSetting%") String timerInfo, ExecutionContext context) { context.getLogger().info("TimerTriggerTestHandler timerTriggerTest triggered: " + timerInfo); TimerTriggerParam param = new TimerTriggerParam(); param.setTimerInfo(timerInfo); param.setLogger(context.getLogger()); handleRequest(param, context); } } |
その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/azure-functions-timer-trigger-manual/demoAzureFunc
サンプルプログラムの実行結果(ローカル)
「mvn azure-functions:run」で実行した結果は以下の通りで、赤枠のログを確認すると、1分毎にTimerTriggerイベントが発生していることが確認できる。
なお、ローカル環境でのデプロイ・実行方法については、以下の記事の「サンプルプログラムの実行結果(ローカル)」を参照のこと。
ScheduleAppSettingの設定追加(Azure上)
ScheduleAppSettingの設定追加は、Azure Portal上で実行できる。その手順は、以下の通り。
1) Azure Functionsの概要を表示した状態で、「構成」メニューを押下する。
2) ScheduleAppSettingの設定を追加するため、「新しいアプリケーション設定」ボタンを押下する。
3) 名前に「ScheduleAppSetting」、値にTimerTriggerの起動タイミングを指定し、「OK」ボタンを押下する。
4) 以下のように、名前が「ScheduleAppSetting」であるアプリケーション設定が追加されていることが確認できるので、「非表示の値です。値を表示するには、クリックしてください」のリンクを押下する。
5) 名前が「ScheduleAppSetting」の値に、指定した値に設定されていることが確認できる。ここで「保存」ボタンを押下する。
6) 以下の確認画面が表示されるので、「続行」ボタンを押下する。
サンプルプログラムの実行結果(Azure上)
サンプルプログラムを変更後、Azure環境上で実行した結果のログは、以下の通り。
1) TimerTriggerによって動作するAzure Functionsの関数の、実行後のログの一覧内容は以下の通りで、1分毎にTimerTriggerイベントが発生していることが確認できる。
2) 実行後のログ一覧内容のうち、49分に出力されたログ出力内容は以下の通り。
3) 実行後のログ一覧内容のうち、50分に出力されたログ出力内容は以下の通り。
なお、Azure環境でのデプロイ・実行方法については、以下の記事の「サンプルプログラムの実行結果(Azure上)」を参照のこと。
要点まとめ
- TimerTriggerイベントが発生するタイミングは、環境変数で設定することもできる。その際、TimerTriggerアノテーションのschedule属性で「%(環境変数名)%」を指定すればよい。