一卓的博客

怕什么真理无穷,
进一寸有一寸的欢喜。

0%

Cron 表达式

今天把以前记录的 Cron 表达式的笔记整理为博客。

Cron 表达式,由七个字段组成:

  • Seconds
  • Minutes
  • Hours
  • Day-of-Month
  • Month
  • Day-of-Week
  • Year (Optional field)

举例如下:

创建一个每三小时执行的 CronTrigger,且从每小时的整点开始执行:

1
0 0 0/3  * * ?

创建一个每十分钟执行的 CronTrigger,且从每小时的第三分钟开始执行:

1
0 3/10 * * * ?

创建一个每周一,周二,周三,周六的晚上 20:00 到 23:00,每半小时执行一次的 CronTrigger:

1
0 0/30 20-23 ? * MON-WED,SAT

创建一个每月最后一个周四,中午 11:30-14:30,每小时执行一次的 trigger:

1
0 30 11-14/1 ? * 5L

解释一下上述例子中各符号的含义:

首先所有字段都有自己特定的取值,例如:

  • 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 号最近的一个工作日。

# 仅适用于 Day-of-Week,表示该月第 XXX 个星期几。例如 Day-of-Week 赋值为 5#2 或者 THU#2,表示该月第二个星期四。

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 * * ?
请作者喝杯咖啡吧