让 Quartz 任务每 15 分钟运行
Quartz 中“每 15 分钟”的表达式是 0 */15 * * * ?。下面是可直接粘贴的配置、接下来的运行时间和需要注意的地方。 Quartz CronTrigger 使用六或七个字段,秒在最前,周日是 1,一个日期字段写 ?。
0 */15 * * * ?在工具中打开“每隔 15 分钟”
CronTrigger
CronTrigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("every-15-minutes")
.withSchedule(CronScheduleBuilder.cronSchedule("0 */15 * * * ?")
.inTimeZone(TimeZone.getTimeZone("UTC")))
.build();Quartz 的坑
一个日期字段必须是 ?Quartz 不支持同时设置日和星期。不用的那个写 ?。
周日是 1星期是 1-7,从 SUN 开始,所以 2-6 是周一到周五。crontab 的 1-5 在这里意思不同。
Misfire到点时调度器没在运行,由 misfire 策略决定怎么处理。默认是尽快补触发一次。
年份可选第七个字段限制年份。不写就是每年。
常见问题
Quartz 中“每 15 分钟”的 cron 表达式是什么?
0 */15 * * * ?。含义:每隔 15 分钟
Quartz 的定时任务按哪个时区运行?
按 JVM 默认时区,除非在 CronScheduleBuilder 上调用 inTimeZone()。
Quartz cron 和 Spring cron 一样吗?
不一样。两者都以秒开头,但 Quartz 周日是 1,且一个日期字段必须写 ?;Spring 周日是 0,没有年字段。
Quartz 里的 L 是什么意思?
在日字段里 L 是每月最后一天;在星期字段里 6L 是最后一个周五,单独的 L 表示周六。