这么讲Cron表达式一看就明白【Quartz.NET总结二】

2020-06-18 00:00:00 指定 表达式 星期 用在 月中

Quartz.NET的任务调度,主要就是依靠CronTrigger和Cron表达式。Cron是已经在UNIX存在了很长一段时间,它有着强大和可靠的调度能力。CronTrigger类也正是是基于Cron调度能力。

CronTrigger使用Cron表达式。它能灵活的设置各种计划任务,比如每周一至周五,早上8点执行某项任务。然而虽然Cron表达式功能强大,灵活,但是也很混乱难懂。所以便在这里介绍Cron表达式相关的配置。希望大家帮助大家快速理解。

Cron格式


Cron表达式被用来配置CronTrigger实例。Cron表达式是一个由6,7个域(子表达式)和空格组成的字符串。每个子表达式都描述了一个单独的日程细节,具体入下图所示:


所以,比如一个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"表示“本月中第三个周五”。

相关实例

注意:'?' and '*' 在 day-of-week和day-of-month的影响

参考链接:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html

相关文章