@Scheduledアノテーションを使用するさまざまなスケジューラを持つSpringブートアプリケーションがあります。スケジュールの一部はfixedRateを使用して設定され、他の設定はcronが使用されます。 fixedRateのスケジュールはうまくいきますが、私は先月、cronの予定の実際の時間が毎日1〜2時間変化することに気付きました。即ちSpringスケジュールされたCronジョブが間違った時刻に起動する
@Scheduled(cron = "0 0 2 * * *")
のクーロン・セットアップとジョブ
3:00 AMの代わりに、午前2時に発生します。毎日起きているわけでもありません。それは数日連続して同じ時間に実行され、その後何かが起き、アプリケーションを再起動するまで実行されるたびに別の時間が経過します。
サーバのシステム時間は正確ですが、ここではすべてのアイディアがありません。誰かがこれまでに遭遇したことはありますか?
EDIT 1
私は仕事が同じ間隔で、ミス発射し、結果がランダムに見えるかどうかを判断するために、いくつかのログに入れて。ここでは、前述のcronジョブの開始/終了時間は3日間です:
Format: Calendar.getInstance().getTime() (System.currentTimeMillis())
Start: Sat Oct 21 03:14:15 CDT 2017 (1508573655778)
End: Sat Oct 21 03:22:24 CDT 2017 (1508574144708)
Start: Sun Oct 22 02:26:58 CDT 2017 (1508657218774)
End: Sun Oct 22 02:35:12 CDT 2017 (1508657712492)
Start: Mon Oct 23 02:00:03 CDT 2017 (1508742003072)
End: Mon Oct 23 02:08:11 CDT 2017 (1508742491493)
Hey Blake。私は先週金曜日にいくつかのログを追加し、週末にいくつかの結果を収集するようにしました。私はそれらの結果を私の元の質問に掲載しました。 –
開始時刻が予定どおりに行われていれば、予定通りに発射されていないようです。その他の注釈は何ですか? Springコンポーネント、コントローラ、またはサービスクラスのスケジュールされたメソッドですか? – Blake
最後に分かりました。私はThreadPoolTaskSchedulerセットアップを持っていなかったので、スケジュールされたすべてのジョブをサポートするのに十分なプールサイズはありませんでした。 1つは起動し、もう1つはブロックされるか、内部待ち行列に入れられますが、最終的に起動すると、キューに入れられた/ブロックされていた時間がずっとずれています。 –