CRON表达式

由于Spring的发展,许多公司都把掌握Spring作为一种基本的入门技能吧。而定时任务是在开实际开发中经常会用到的功能,说到定时任务,是不是经常在Spring配置文件或者注解上看见类似如下的字符串

  "0 0/5 * * * ?"

  "0 10,44 14 ? 3 WED"

  "0 0-5 14 * * ?" 

  "0 15 10 * * ? 2005"

这些字符串其实就是所谓的CRON表达式

CRON表达式其实就是 有固定格式 的字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

Seconds Minutes Hours DayofMonth Month DayofWeek Year或 
Seconds Minutes Hours DayofMonth Month DayofWeek

 

 

每个域都有固定的可输入的字符:

Seconds:可出现", - * /"四个字符,有效范围为0-59的整数 Minutes:可出现", - * /"四个字符,有效范围为0-59的整数 
Hours:可出现", - * /"四个字符,有效范围为0-23的整数 
DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数 
Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc 
DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推 
Year:可出现", - * /"四个字符,有效范围为1970-2099年

 

其中

*: 代表任意匹配,譬如在Seconds中输入*,表示每秒钟都执行任务。

?: 也是代表任意匹配,可是它只能在DayofWeek和DayofMonth使用,但是因为他们两个相互约束的原因,在实际使用中往往不能任意匹配。那为什么要使用 ? 而不使用 * 呢,因为要区分呀,譬如我要每个月的15号执行任务,我CRON表达式为 "1 2 3 15 * ?",最后一位DayofWeek只能使用?才能达到效果,如果使用*,那么就是不管星期几都执行,那么就违背了原意了。

/: 它的表示形式是 a/b,意思是从a开始,每隔b执行一次,假如在second 写了 2/2,那么会在2s开始,每2s执行一次。

-: 表示范围,形式是a-b,表示从a开始到b每单位执行一次,譬如在second处写了2-20,表示在2s到20s每秒执行一次。

,: 表示枚举值,形式是a,b,表示在a,b时刻各执行一次。

L: 表示最后,只能在DayofWeek 和 DayofMonth 使用,譬如1L表示最后一个星期天执行。(记住开始1星期天不是星期一)

W: 表示最近有效工作日(周一至周五)。只能在DayofMonth使用。

#: 只能出现在DayofWeek,譬如 1#2 表示第2个星期日。

 

posted @ 2016-04-12 16:24  hudiwei-hdw  阅读(185)  评论(0编辑  收藏  举报