Quartz cron 定时任务
Quartz CronTrigger 使用六或七个字段,秒在最前,周日是 1,一个日期字段写 ?。 选择一个调度,查看精确表达式、可直接粘贴的配置和接下来的运行时间。
调度
- 每 5 分钟
0 */5 * * * ? - 每小时
0 0 * * * ? - 每分钟
0 * * * * ? - 每 10 分钟
0 */10 * * * ? - 每 15 分钟
0 */15 * * * ? - 每 30 分钟
0 */30 * * * ? - 每天零点
0 0 0 * * ? - 每天早上 9 点
0 0 9 * * ? - 工作日早上 9 点
0 0 9 ? * 2-6 - 每周一
0 0 0 ? * 2 - 每月 1 号
0 0 0 1 * ? - 每 6 小时
0 0 */6 * * ? - 每周日零点
0 0 0 ? * 1 - 每 2 小时
0 0 */2 * * ? - 每 12 小时
0 0 */12 * * ? - 每天中午 12 点
0 0 12 * * ? - 每周五
0 0 0 ? * 6 - 每月最后一天
0 0 0 L * ? - 每季度
0 0 0 1 */3 ? - 每 2 分钟
0 */2 * * * ? - 每 3 小时
0 0 */3 * * ? - 每天早上 6 点
0 0 6 * * ? - 每天晚上 6 点
0 0 18 * * ? - 每天两次
0 0 */12 * * ? - 工作日晚上 6 点
0 0 18 ? * 2-6 - 周末上午 10 点
0 0 10 ? * 1,7 - 每月 15 号
0 0 0 15 * ? - 每月第一个周一
0 0 9 ? * 2#1 - 每月最后一个周五
0 0 17 ? * 6L - 每年一次
0 0 0 1 1 ? - 每 30 秒
*/30 * * * * ? - 每 3 分钟
0 */3 * * * ? - 每 20 分钟
0 */20 * * * ? - 每 4 小时
0 0 */4 * * ? - 每 8 小时
0 0 */8 * * ? - 每天凌晨 1 点
0 0 1 * * ? - 每天凌晨 2 点
0 0 2 * * ? - 每天凌晨 3 点
0 0 3 * * ? - 每天早上 8 点
0 0 8 * * ? - 每个工作日
0 0 0 ? * 2-6 - 每个周末
0 0 0 ? * 1,7 - 每周二
0 0 0 ? * 3 - 每周三
0 0 0 ? * 4 - 每周四
0 0 0 ? * 5 - 每周六
0 0 0 ? * 7 - 每 6 个月
0 0 0 1 */6 ? - 每 10 秒
*/10 * * * * ? - 每 5 秒
*/5 * * * * ?
Quartz 的坑
一个日期字段必须是 ?Quartz 不支持同时设置日和星期。不用的那个写 ?。
周日是 1星期是 1-7,从 SUN 开始,所以 2-6 是周一到周五。crontab 的 1-5 在这里意思不同。
Misfire到点时调度器没在运行,由 misfire 策略决定怎么处理。默认是尽快补触发一次。
年份可选第七个字段限制年份。不写就是每年。
与 Quartz 互转
常见问题
Quartz 的定时任务按哪个时区运行?
按 JVM 默认时区,除非在 CronScheduleBuilder 上调用 inTimeZone()。
Quartz cron 和 Spring cron 一样吗?
不一样。两者都以秒开头,但 Quartz 周日是 1,且一个日期字段必须写 ?;Spring 周日是 0,没有年字段。
Quartz 里的 L 是什么意思?
在日字段里 L 是每月最后一天;在星期字段里 6L 是最后一个周五,单独的 L 表示周六。