序言Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无缝,说是编码艺术凝集一点不过分。 牛逼吹完啦,我就写几个简单的cron表达式欣赏下: 1、0/20 * * * * ? note:每20秒 2、15 0/2 * * * ? note:每小时从0分钟开始,每2分钟的第15秒,假如当前时间是20:00:00,那么他的维度就在:20:02:5,20:04:15,20:06:15 .... 3、0 0/2 17-21 * * ? note: 每天的下午5点到晚上9点,每隔2分中的第00秒,假如当前时间是20:24:52 ,那么他的时间维度在:20:26:00,20:28:00,20:30:00 ... 看到Cron表达式的简洁与强大并存,忍不住往下深入,Go Cron表达式的符号、格式表格表1、cron表达式特殊字符意义示意表
表2、 Cron 表达式特殊字符意义对应表
Cron表达式特殊字符详解接下来的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,凌晨触发
|
|