转载

Java定时器的cron设置详解Quartz

这些星号由左到右按顺序代表 : * * * * * * *
格式: [秒] [分] [小时] [日] [月] [周] [年]

序号 说明   是否必填  允许填写的值         允许的通配符
1      秒          是        0-59                        , - * /
2      分          是        0-59                        , - * /
3     小时        是        0-23                        , - * /
4      日          是        1-31                        , - * ? / L W
5      月          是        1-12 or JAN-DEC     , - * /
6      周          是        1-7 or SUN-SAT      , - * ? / L #
7      年          否        empty 或 1970-2099  , - * /

接下来的cron表达式,我会结合着quartz来描述。首先cron表达式是有7个域的,依次分别是:秒分时日月周年,其中年是可选类型,也就是说他如果在不设定年分的情况下是每年。

1、星号(*)

他在每个域都可以存在,包含所有合法的值,看好这里是包含所有,意思就是说在那一个域上表示这个域上的所有值,加入在月,表示1-12,也就是说是每月,都会被执行。

示例1:0**1*?   note:每月1号凌晨都会被执行。

示例2:0**?**   note:每分钟的00秒被执行。

2、问号(?)

他在cron表达式中,必定存在,有且只有一个,且他只能在日和周的域中存在,表示,不关系这个域是什么值,看好了,跟*的包含所有值不同,他是不关系是月的哪一天或是周的哪一天。如果在周域定义具体的数值,日域必须为问号(?),如果在日域定义啦具体的数值,那么周域就必须为问号(?)。为什么,因为避免含糊不清的表达方式,比如3月的第20天,刚好是第三周的第5天,那么如果在日域定义20,周域定义5这样,就双重定义,很蛋疼。cron表达式也不允许。

示例1:0 10 18 ? 3 WEB     note:每年3月的每个星期三,下午6点10分都会被触发

示例2:0 10 18 15 3 ?        note:每年三月的第15天,下午6点10分都会被触发

3、横杠(-)

他在cron表达式中,可以存在任何域,如果存在某个域,表示起止时间,他表示一个时间段。

实例1:0 10 18 1-5 * ?          note:每月的1号到5号(包含每月1号和5号,每月共计5天都会被触发),下午6点10分都会被触发

实例2:0 10-15 * ? * *          note:每小时的第10分钟到第15分钟(包含每小时的第10分钟和第15分钟,每小时共计5分钟都会被触发),都会被触发

4、逗号(,)

他在cron表达式中,可以存在任何域,如果存在某个域,表示可选值,他是个多点的概念。

实例1:10,20  *  * ? * *         note:每分钟的第10秒与第20秒都会被触发

实例2:0 10,20 * 1,2 * ?          note:每月的第1天与第2天的,每小时的第10分钟与第20分钟被触发。

5、斜划线(/)

他在cron表达式中,可以存在任何域,表示增量,是在域中设定一个起始的值,然后每隔多少时间的概念。

实例1:5/20 * * ? * *           note:每分钟的第5秒,第25秒,第45秒 都会被执行。

实例2:0 * 2/2 ? *  *          note:每天的第2小时,第4小时,第6小时,第8小时 ... 第22小时的00分00秒都会被触发。

6、井号(#)

他在cron表达式中,只能存在周这一个域,表示第几周的星期几,如果超出范围,则忽略不记。

实例1:* * * ? * 3#4            note:每月的第4个星期的周2,凌晨触发。

实例2:* * * ? * 6#2            note:每月的第2个星期的周5,凌晨触发

常用示例:
0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 2005 2005年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)以及每天下午的 18点到18点59分(整点开始,每隔5分触发)

0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发 (特殊情况,在一个时间设置里,执行两次或 两次以上的情况)
0 59 2 ? * FRI 每周5凌晨2点59分触发;
0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发
0 15 10 15 * ? 每月15号上午10点15分触发
0 15 10 L * ? 每月最后一天的10点15分触发
0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)

正文到此结束
本文目录