跳到正文
cron.surf

让 Quartz 任务每 30 分钟运行

Quartz 中“每 30 分钟”的表达式是 0 */30 * * * ?。下面是可直接粘贴的配置、接下来的运行时间和需要注意的地方。 Quartz CronTrigger 使用六或七个字段,秒在最前,周日是 1,一个日期字段写 ?。

0 */30 * * * ?在工具中打开

“每隔 30 分钟”

CronTrigger

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

Quartz 的坑

一个日期字段必须是 ?Quartz 不支持同时设置日和星期。不用的那个写 ?。
周日是 1星期是 1-7,从 SUN 开始,所以 2-6 是周一到周五。crontab 的 1-5 在这里意思不同。
Misfire到点时调度器没在运行,由 misfire 策略决定怎么处理。默认是尽快补触发一次。
年份可选第七个字段限制年份。不写就是每年。

常见问题

Quartz 中“每 30 分钟”的 cron 表达式是什么?

0 */30 * * * ?。含义:每隔 30 分钟

Quartz 的定时任务按哪个时区运行?

按 JVM 默认时区,除非在 CronScheduleBuilder 上调用 inTimeZone()。

Quartz cron 和 Spring cron 一样吗?

不一样。两者都以秒开头,但 Quartz 周日是 1,且一个日期字段必须写 ?;Spring 周日是 0,没有年字段。

Quartz 里的 L 是什么意思?

在日字段里 L 是每月最后一天;在星期字段里 6L 是最后一个周五,单独的 L 表示周六。