标准 Quartz cron 教程

cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。
cron语法格式:秒    分    时    日    月    周    [年]

    *   *   *   *   *   *   *
    -   -   -   -   -   -   - 
    |   |   |   |   |   |   |
    |   |   |   |   |   |   +-- 年(可选字段) 
    |   |   |   |   |   +------ 周 (星期天 ~ 星期六使用1-7或者SUN,MON,TUE,WED,THU,FRI,SAT)
    |   |   |   |   +---------- 月 (1 - 12或者JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC)
    |   |   |   +-------------- 日 (1 - 31)
    |   |   +------------------ 时 (0 - 23)
    |   +---------------------- 分 (0 - 59)
    +-------------------------- 秒 (0 - 59)
                        

每个域允许的值

位置 字段名 必填 取值范围 特殊字符
1 0-59 * - / ,
2 0-59 * - / ,
3 0-23 * - / ,
4 1-31 * - / , ? L W C
5 1-12 或 JAN-DEC * - / ,
6 1-7 或 SUN-SAT * - / , ? L # C
7 1970-2099 * - / ,

特殊字符的含义

字符 含义 示例
* 表示匹配域的任意值 在秒这个域使用 *,即表示每秒钟都会执行一次。
- 表示区间范围 在分这个域使用 6-18,表示从6分到18分钟每分钟执行一次。
/ 表示起始时间开始执行一次,然后每隔固定时间执行一次 在分这个域使用6/16,表示在第6分钟时执行一次,之后每16分钟执行一次,即在第5分钟、第21分、第37分、第53分分别执行一次。
, 表示列出枚举值 在时这个域使用8,10,则意味着在每天8点和10点分别执行一次。
? 表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。 要在每月的20号执行一次,不管每个月的20号是星期几,则只能使用如下写法:0 0 0 20 * ?。其中,因为日期域已经指定了 20 号,最后一位星期域只能用?,不能使用其他。0 0 0 ? * 1 最后一位使用1表示周天,则表示不管日是哪一天,只要是周天就会执行。
L 表示最后,只能出现在【日】和【周】两个域 在【日】这个域使用,表示本月的最后一天;在【周】这个域使用,例如5L意味着在最后的一个星期四触发。
W 表示有效工作日(周一到周五),只能出现在日这个域,系统将在离指定日期最近的有效工作日触发事件。 在日这个域使用,例如15W,表示在每月最接近15号的工作日触发。如果15号是星期二,就在15号触发;如果15号是星期六,就在14号(周五)触发;如果15号是星期日,那就在16号(周一)触发;绝对不会跨月。
LW 这两个字符可以连用,表示在某个月最后一个工作日 比如:0 0 10 LW * ?;表示在每个月的最后一个工作日的10点执行
# 表示每个月第几个星期几,只能出现在星期这个域 在星期这个域使用 4#2,表示某月的第二个星期三,4 表示星期三,2 表示第二个。
C 该字符只在日期和星期字段中使用,代表“Calendar”的意思 它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。但由于其复杂性,很少使用

各个域详解

1. *

含义:代表该字段所有有效的取值。

* * * * * ?     每秒钟执行一次

2. -

含义:代表区间范围

1-6 * * * * ?     在每分的1~6秒的每秒都执行一次

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

6/10 * * * * ?     从第6秒开始执行,每隔10秒执行一次,在第6秒、第16秒、第26秒、第36秒、第46秒、第56秒都执行一次

4. ,

含义:表示枚举

6,16 * * * * ?     在第6秒、第16秒进行执行

1. *

含义:代表该字段所有有效的取值。

* * * * * ?     每分钟执行

2. -

含义:代表区间范围

0 1-6 * * * ?     在每小时的第 1 分钟到第 6 分钟,每分钟整执行一次

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

0 6/20 * * * ?     在每小时的第6分开始执行,每隔20分执行一次,在第6分、第26分、第46分都执行一次

4. ,

含义:表示枚举

0 6,10 * * * ?     在每小时的6分、16分执行一次

1. *

含义:代表该字段所有有效的取值。

0 0 * * * ?     每小时整执行一次

2. -

含义:代表区间范围

0 0 2-8 * * ?     在每天的凌晨2点到8点之间,每小时整执行一次

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

0 0 8/6 * * ?     在每天的8点开始执行一次,每隔6时执行一次,在第8时、第14时、第20时都执行一次

4. ,

含义:表示枚举

0 0 10,12,14,16 * * ?     在每天的10时、12时、14时、16时执行一次

1. *

含义:代表该字段所有有效的取值。

0 0 0 * * ?     每天凌晨整执行一次

2. -

含义:代表区间范围

0 0 0 6-8 * ?     在每月的6号到8号凌晨整执行一次

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

0 0 8/6 * * ?     在每天的8点开始执行一次,每隔6时执行一次,在第8时、第14时、第20时都执行一次

4. ,

含义:表示枚举

0 0 10,12,14,16 * * ?     在每天的10时、12时、14时、16时执行一次

5. ?

含义:表示不指定。日如果是不指定,那么周必须不能是?,两个字段有且只能有一个?不指定,不能同时指定,也不能同时不指定

0 0 0 ? * 1     在每个周天执行

6. L

含义:表示每月最后一天

0 0 0 L * ?     在每个月的最后一天凌晨执行

7. W

含义:表示距离有效工作日最近的那个工作日,有效工作日指周一到周五

0 0 0 1W * ?     在距离每月1号最近的有效工作日凌晨执行

8. C

含义:表示和日历绑定。如果没有和日历绑定,则和*含义一样,逻辑复杂,很少使用

1. *

含义:代表该字段所有有效的取值。

0 0 0 1 * ?     每月1号凌晨执行一次

2. -

含义:代表区间范围

0 0 0 1 4-6 ?     在每年的4~6月的每月1号凌晨执行一次

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

0 0 0 1 2/4 ?     从2月开始执行,每隔4个月执行一次,在2月、第6月、第10月的1号凌晨都执行一次

4. ,

含义:表示枚举

0 0 0 1 8,9,10 ?     在8月、9月、10月的1号凌晨执行

1. *

含义:代表该字段所有有效的取值。

0 0 0 ? * *     每周的周一到周五的凌晨执行。其实和每天的含义是一样的。

2. -

含义:代表区间范围

0 0 0 ? * 2-3     在每周的周一到周二凌晨执行

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

0 0 0 ? * 2/2     从周一开始执行,每隔2天执行一次,且在凌晨执行

4. ,

含义:表示枚举

0 0 0 ? * 2,4,6     在每周的周一、周三、周五凌晨执行

5. ?

含义:表示不指定。周如果是不指定,那么日必须不能是?,两个字段有且只能有一个?不指定,不能同时指定,也不能同时不指定

0 0 0 1 * ?     在每月的1号凌晨执行

6. L

含义:表示最后一个周几执行

0 0 0 ? * 6L     在每月的最后一个周五凌晨执行

7. #

含义:表示第几个周几执行,格式:周几#第几个

* * * ? * 7#1     在每月的第一个周六执行。

8. C

含义:表示和日历绑定。很少使用

1. *

含义:代表该字段所有有效的取值。这里的*和不指定是一样的,都是每年

0 0 0 1 1 ? *     每年1月1号凌晨执行

2. -

含义:代表区间范围

0 0 0 1 1 ? 2028-2036     在2028年到2036年的区间中,每年1号凌晨执行

3. /

含义:表示起始时间开始触发,然后每隔固定时间执行一次

0 0 0 1 1 ? 2028/2     从2028年开始执行,每隔2个年执行一次,都是在1月号凌晨执行

4. ,

含义:表示枚举

0 0 0 1 1 ? 2028,2030     在2028年和2030年的1月1号凌晨执行

附录

月的缩写对照表

月份 数字 缩写
一月 1 JAN
二月 2 FEB
三月 3 MAR
四月 4 APR
五月 5 MAY
六月 6 JUN
七月 7 JUL
八月 8 AUG
九月 9 SEP
十月 10 OCT
十一月 11 NOV
十二月 12 DEC

周的缩写对照表

周几 数字 缩写
周日 1 SUN
周一 2 MON
周二 3 TUE
周三 4 WED
周四 5 THU
周五 6 FRI
周六 7 SAT