本文へスキップ
cron.surf

Quartz ジョブを1 時間ごとに実行する

Quartz で「1 時間ごと」を表す式は 0 0 * * * ? です。以下に、そのまま使える設定、次回の実行時刻、注意点をまとめます。 Quartz の CronTrigger は秒から始まる 6〜7 フィールドで、日曜日は 1、日付フィールドの一方に ? を書きます。

0 0 * * * ?ツールで開く

“毎時”

CronTrigger

CronTrigger
Trigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("every-hour")
    .withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * * ?")
        .inTimeZone(TimeZone.getTimeZone("UTC")))
    .build();

Quartz の注意点

日付フィールドの一方は ?Quartz は日と曜日の同時指定に対応していません。使わない方に ? を書きます。
日曜日は 1曜日は SUN から 1〜7 なので、2-6 が月曜日〜金曜日です。crontab の 1-5 とは意味が違います。
ミスファイア発火時刻にスケジューラが止まっていた場合の動作はミスファイア指示で決まります。既定ではできるだけ早く 1 回発火します。
年は省略可7 番目のフィールドで年を限定できます。省略すると毎年です。

よくある質問

Quartz で「1 時間ごと」を表す cron 式は?

0 0 * * * ? です。意味:毎時

Quartz のスケジュールはどのタイムゾーンで動きますか?

CronScheduleBuilder で inTimeZone() を呼ばない限り、JVM の既定タイムゾーンです。

Quartz と Spring の cron は同じですか?

違います。どちらも秒から始まりますが、Quartz は日曜日が 1 で日付フィールドの一方に ? が必要です。Spring は日曜日が 0 で年フィールドがありません。

Quartz の L はどういう意味ですか?

日フィールドの L は月末、曜日フィールドの 6L は最終金曜日です。曜日フィールドの L 単独は土曜日を意味します。