Quartz.NET总结(二)CronTrigger和Cron表达式

  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
时间: 2024-09-20 00:34:42

Quartz.NET总结(二)CronTrigger和Cron表达式的相关文章

Quartz job.xml配置的Cron表达式详解

Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成. Cron表达式时间字段: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 , - * / 2 分钟 0-59 , - * / 3 小时 0-23 , - * / 4 日期 1-31 , - * ? / L W C 5 月份 1-12 , - * / 6 星期 1-7 , - * ? / L C # 7 年(可选) 空值1970-2099 , - * / No 时间域名 允

Spring集成Quartz定时任务框架介绍和Cron表达式详解

原文地址:http://www.cnblogs.com/obullxl/archive/2011/07/10/spring-quartz-cron-integration.html 在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码.使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的

Spring 定时任务Quartz,Cron表达式提示cron expression must consist of 6 fields

问题描述 我要设置定时任务,每年的6月31日执行.按照论坛上说的,cron可以设置6位或7位域.仿照规则,有表达式:@Scheduled(cron="000316?2014-2099")可是一直启动报错,提示必须6位域?网上都说可以6位或7位域啊,求解释.java.lang.IllegalArgumentException:cronexpressionmustconsistof6fields(found7in000316?2014-2099)atorg.springframework.

(2)Spring集成Quartz定时任务框架介绍和Cron表达式详解

在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码.使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成,下面介绍它们集成方法和Cron表达式的详细介绍. 一.增加所依赖的JAR包1.增加Spring的Maven依赖 <dependency><groupId>org.

quartz的cron表达式问题

问题描述 quartz的cron表达式问题 一.1分1秒后,每隔1分1秒执行一次,Cron = ""1/1 1/1 * * * ?"" 是这样吗? 二.1分后,每隔1分执行一次, Cron = ""* 1/1 * * * ?"" 还是 Cron = ""0 1/1 * * * ? ""这两者有什么区别呢 解决方案 Quartz及Cron表达式Quartz cron 表达式Quartz 的

QuartZ Cron表达式在java定时框架中的应用

CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronTrigger,你可以指定触发的时间表如"每星期五中午",或"每个工作日9:30时",甚至"每5分钟一班9:00和10:00逢星期一上午,星期三星期五". 即便如此,SimpleTrigger一样,CronTrigger拥有的startTime指定的时

Quartz Cron 表达式

Cron 表达式包括以下 7 个字段 格式: [秒] [分] [小时] [日] [月] [周] [年] 说明 是否必填 允许填写的值 允许的通配符 秒 是 0-59 , - * / 分 是 0-59 , - * / 时 是 0-23 , - * / 日 是 1-31 , - * ? / L W 月 是 1-12 or JAN-DEC , - * / 周 是 1-7 or SUN-SAT - * ? / L # 年 否 empty 或 1970-2099 , - * / 通配符说明1. 反斜线(/

SpringBoot定时任务及Cron表达式详解

摘要: 讲解如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各定时任务. 详细说明cron表达式用法. 一.定时任务概述 后台项目开发中经常会用到定时任务,现在实现定时任务都方式也是多种多样.下面列举几种常见的定时任务实现方式: 1. Quartz:Quartz的使用相当广泛,它是一个功能强大的调度器,当然使用起来也相对麻烦; 2. java.util包里的Timer,它也可以实现定时任务但是功能过于单一所有使用很少. 3. 就是我们今天要介绍的Spring自带的定时任务S

cron-QuartZ Cron表达式 指定只执行一次。比如 2016年3月3日0点0分0秒 如何实现

问题描述 QuartZ Cron表达式 指定只执行一次.比如 2016年3月3日0点0分0秒 如何实现 QuartZ Cron表达式 貌似指定不了 某一天这一辈子执行1次那种 解决方案 你只要设置了具体日期应该就只会执行一次 0 0 0 3 3 ? 2016 至于星期几就不需要管了. 解决方案二: 楼上正解,管日不管周,管周不管日,如果日和周都写上具体值就可能会解释不通.比如:到底是星期2的1号,还是1号的星期2. 只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?,意