質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.43%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

1212閲覧

Spring Bootの@Scheduledのcron機能が期待通りに動作しない

Yoshi-Koyama

総合スコア23

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/11/01 04:21

編集2021/11/01 05:34

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.43%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問