Quartz.NET的任务调度,主要就是依靠CronTrigger和Cron表达式。Cron是已经在UNIX存在了很长一段时间,它有着强大和可靠的调度能力。CronTrigger类也正是是基于Cron调度能力。
CronTrigger使用Cron表达式。它能灵活的设置各类计划任务,好比每周一至周五,早上8点执行某项任务。然而虽然Cron表达式功能强大,灵活,可是也很混乱难懂。因此便在这里介绍Cron表达式相关的配置。但愿你们帮助你们快速理解。
Cron格式
Cron表达式被用来配置CronTrigger实例。Cron表达式是一个由6,7个域(子表达式)和空格组成的字符串。每一个子表达式都描述了一个单独的日程细节
域 |
是否强制 |
容许值 |
容许特殊字符 |
Seconds |
YES |
0-59 |
, - * / |
Minutes |
YES |
0-59 |
, - * / |
Hours |
YES |
0-23 |
, - * / |
Day of month |
YES |
1-31 |
, - * ? / L W |
Month |
YES |
1-12 or JAN-DEC |
, - * / |
Day of week |
YES |
1-7 or SUN-SAT |
, - * ? / L # |
Year |
NO |
empty, 1970-2099 |
, - * / |
因此,好比一个cron表达式字符串"0 0 10 ? * MON",这表示“每周一的中午10:00”。
上面的列表,能够清楚的看出,全部的域中的值都有特定的合法范围,每一个域均可以单独配置。例如:Day of week(周中的天)必须有值(SUN—SAT)或是使用特殊字符,因此"0 0 10 ? * MON",就能够改为为"MON-FRI", "MON, WED, FRI"甚至是"MON-WED,SAT"。
特殊字符说明
'*' 表示域中“每一个”。好比在"Minutes"域中的*表示每分钟。
'?' 用在day-of-month及day-of-week域中,表示“没有指定值”。这对于须要指定一个或者两个域的值而不须要对其余域进行设置来讲至关有用。例如,我想在一个月的某一天(例如,第十),而不在意具体是哪一天,我会把“10”放在day-of-month 域,而后“?”在day-of-week里。
'-' 指定范围,例如,“10-12”在Hours域,表示10点到12点。
',' 指定附加值,例如,“MON,WED,FRI”在day-of-week域中,表示“星期一,星期三和星期五”。
'/' 没有具体的值,用来用于指定值的增量,例如, 若是在Seconds域中,'0/15',它表示“从0开始,每隔15秒”。
'L' 只用在day-of-month及day-of-week中,这个字符是"last"的简写,可是在两个域中的意义不一样。例如,在day-of-month域中的"L"表示本月的最后一天,即,一月的31日,非闰年的二月的28日。若是它用在day-of-week中,则表示"7"或者"SAT"。可是,这个字符跟在别的值后面,则表示"当月的最后的周XXX"。例如:"6L" 或者 "FRIL"都表示本月的最后一个周五。同时,也能够用来指定第某个月的最后一天的倒数第几天,如“L-3”表示某月最后一天的倒数第三天。注意:当使用'L'选项时,最重要的是不要指定列表或者值范围,不然会致使混乱。
'W' 用于day-of-week域中指定给定日(星期一星期五)最近的一天。例如:"15W",则表示“距离月中15号最近的工做日是周几”。
'#' 表示本月中的第几个周几。例如:day-of-week域中的"6#3" 或者 "FRI#3"表示“本月中第三个周五”。
相关实例
表达式 |
含义 |
0 0 12 * * ? |
天天中午12点 |
0 15 10 ? * * |
天天上午10点15 |
0 15 10 * * ? |
天天上午10点15 |
0 15 10 * * ? * |
天天上午10点15 |
0 * 14 * * ? |
天天下午2点到2点59的每分钟 |
0 0/5 14 * * ? |
天天下午2点到2点59的每5分钟 |
0 0/5 14,18 * * ? |
天天下午2点到2点59和6点到6点55的每5分钟 |
0 0-5 14 * * ? |
天天下午2点到2点05的每分钟 |
0 10,44 14 ? 3 WED |
3月份每周三下午2点10和2点44 |
0 15 10 ? * MON-FRI |
每周一到周五的上午10点15 |
0 15 10 15 * ? |
每月第15天的上午10点15 |
0 15 10 L * ? |
每月最后一天的上午10点15 |
0 15 10 L-2 * ? |
每月最后一天的倒数次日的上午10点15 |
0 15 10 ? * 6L |
每个月的最后一个周五的上午10点15 |
0 15 10 ? * 6L 2002-2005 |
2002年到2005年的每个月的最后一个周五的上午10点15 |
0 15 10 ? * 6#3 |
每个月的第三个周五上午10点15 |
0 0 12 1/5 * ? |
每个月的第一天开始,每5天的中午12点 |
0 11 11 11 11 ? |
每一年的11月11日11点11分 |
注意:'?' and '*' 在 day-of-week和day-of-month的影响
参考连接:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html