今天把以前记录的 Cron 表达式的笔记整理为博客。
Cron 表达式,由七个字段组成:
- Seconds
- Minutes
- Hours
- Day-of-Month
- Month
- Day-of-Week
- Year (Optional field)
举例如下:
创建一个每三小时执行的 CronTrigger,且从每小时的整点开始执行:
创建一个每十分钟执行的 CronTrigger,且从每小时的第三分钟开始执行:
创建一个每周一,周二,周三,周六的晚上 20:00 到 23:00,每半小时执行一次的 CronTrigger:
1
| 0 0/30 20-23 ? * MON-WED,SAT
|
创建一个每月最后一个周四,中午 11:30-14:30,每小时执行一次的 trigger:
解释一下上述例子中各符号的含义:
首先所有字段都有自己特定的取值,例如:
- Seconds 和 Minutes 取值为 0 到 59,
- Hours 取值为 0 到 23,
- Day-of-Month 取值为 0-31,
- Month 取值为 0-11,或者 JAN,FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
- Days-of-Week 取值为 1-7 或者 SUN, MON, TUE, WED, THU, FRI, SAT.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 每个字段可以取单个值,多个值,或一个范围, 例如 Day-of-Week 可取值为“MON,TUE,SAT”,“MON-FRI”或者“TUE-THU,SUN”。
通配符 * 表示该字段可接受任何可能取值。 例如 Month 字段赋值 * 表示每个月,Day-of-Week 字段赋值 * 表示一周的每天。
/ 表示开始时刻与间隔时段。 例如 Minutes 字段赋值 2/10 表示在一个小时内每 10 分钟执行一次,从第 2 分钟开始。
? 仅适用于 Day-of-Month 和 Day-of-Week。? 表示对该字段不指定特定值。 适用于需要对这两个字段中的其中一个指定值,而对另一个不指定值的情况。 一般情况下,这两个字段只需对一个赋值。
L 仅适用于 Day-of-Month 和 Day-of-Week。 L 用于 Day-of-Month 表示该月最后一天。 L 单独用于 Day-of-Week 表示周六,否则表示一个月最后一个星期几, 例如 5L 或者 THUL 表示该月最后一个星期四。
W 仅适用于 Day-of-Month,表示离指定日期最近的一个工作日, 例如 Day-of-Month 赋值为 10W 表示该月离 10 号最近的一个工作日。
|
Cron 表达式范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
|