前提・実現したいこと
Spring Bootの@Scheduled機能を用いたバッチ処理を2つ作成する。
発生している問題・エラーメッセージ
2つのバッチ処理を作成しています。
# | 機能 | 実行タイミング |
---|---|---|
1 | データを取得するバッチ | 毎日午前0時(日本時間)に実行 |
2 | データを統合するバッチ | 毎日午前3時(日本時間)に実行 |
0時実行のバッチは正常に動作することがログから確認できましたが、2のバッチ実行が確認できませんでした。
該当のソースコード
kotlin
1@Service 2class ScheduledTaskService { 3 4 @Scheduled(cron = "${task.fetch-data.cron}", zone = "${task.fetch-data.zone}") 5 fun fetchData() { 6 println("The time is now " + ZonedDateTime.now(ZoneId.of("Asia/Tokyo")).toString()) 7 println("start to fetch data") 8 } 9 10 @Scheduled(cron = "${task.integrate-data.cron}", zone = "${task.integrate-data.zone}") 11 fun integrateData() { 12 println("The time is now " + ZonedDateTime.now(ZoneId.of("Asia/Tokyo")).toString()) 13 println("start to integrate data") 14 } 15}
yml
1task: 2 fetch-data: 3 cron: ${TASK_FETCH_DATA_CRON:0 0 0 * * *} 4 zone: ${TASK_FETCH_DATA_ZONE:Asia/Tokyo} 5 integrate-data: 6 cron: ${TASK_INTEGRATE_DATA_CRON:0 0 3 * * *} 7 zone: ${TASK_INTEGRATE_DATA_ZONE:Asia/Tokyo}
試したこと
バッチ実行の時間を変更することで2のバッチが動作する場合と動作しない場合がありました。
別の時間で検証
バッチ1: 午前11:00
バッチ2: 午後12:00
結果: 1は動作したが2は動作しなかった
2の実行タイミングを1の1分後に設定
バッチ1: 午後12:20PM
バッチ2: 午後12:21PM
結果: 1と2両方が動作した
1と2の実行タイミングを2->1の順番に変更
バッチ1: 午後14:30PM
バッチ2: 午後14:05PM
結果: 2は動作したが1は動作しなかった
サーバーを立ち上げてからバッチが実行されるまでの時間によって結果が変わるのでは?と考えており現在調査中です。
もし何か心当たりがございましたらぜひお伺いしたいです。
補足情報(FW/ツールのバージョンなど)
- PC: macOS Big Sur 2.5GHz クアッドコアIntel Core i7 メモリ16GM
- Project SDK: Java 11 (Amazon correto)
- Spring Bootのバージョン: 2.2.4.RELEASE
- エディタ: IntelliJ
あなたの回答
tips
プレビュー