私は春のタスクを毎日真夜中に実行するようにスケジュールしようとしています。 Springの 公式ガイド に従い、スケジューラクラスを次のように作成しました。
@Component
public class OverduePaymentScheduler {
@Scheduled(cron = "0 0 0 * * *")
public void trackOverduePayments() {
System.out.println("Scheduled task running");
}
}
ただし、クロックが午前12時になると、タスクは実行されません。この link でクォーツスケジューラのドキュメントからcron式を取得しました。
Cron式を10秒ごとに実行される「*/10 * * * * *」に変更すると、スケジューラーは正常に実行されます。
それで、私は何を間違っていますか?
最終的にこのcron式0 0 0 * * *
で動作するようになりましたが、このようにスケジューラクラスでタイムゾーンを設定する必要がありました。 @Scheduled(cron = "0 0 0 * * *",zone = "Indian/Maldives")
これらは、cron式の有効な形式です。
0 0 * * * *
=毎日の1時間ごとのトップ。*/10 * * * * *
= 10秒ごと。0 0 8-10 * * *
=毎日8、9、および10時。0 0 6,19 * * *
=毎日午前6:00と午後PM。0 0/30 8-10 * * *
=毎日8:00、8:30、9:00、9:30、10:00、10:30。0 0 9-17 * * MON-FRI
=平日の9時から5時まで0 0 0 25 12 ?
=毎週クリスマスの深夜0時パターンは次のとおりです。
second, minute, hour, day, month, weekday
あなたの答えは:
0 0 0 * * *
毎日午前12:00に以下のcronパターンを使用してください。
// at 12:00 AM every day
@Scheduled(cron="0 0 0 * * ?")
このウェブサイトでcronパターンを確認しました: http://www.cronmaker.com/ 。
パターン0 0 0 * * *
は無効と表示されます。