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",这表示“每周一的中午12:00”。

上面的列表,可以清楚的看出,所有的域中的值都有特定的合法范围,每个域都可以单独配置。例如:Day of week(周中的天)必须有值(SUN—SAT)或是使用特殊字符,所以"0 0 12 ? * 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-08-02 02:48:48

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

Quartz.Net Cron表达式生成器winform版

最近使用Quartz.net做了几个同步任务,感觉非常好.表达式设置也是非常灵活,但是新入手发现对表达式不熟,每次都要使用在线生成器. 于是写了一个winform版本的生成器练练手,也加强对表达式的理解. 当然很多地方借鉴了网上的在线生成器:http://cron.qqe2.com/,并完善了一些设置. 表达式的含义园子里已经有很多的文章介绍了,在这就不重复解释了,可以参考Quartz.NET总结(二)CronTrigger和Cron表达式. 代码开源地址:点击这里,还有很多不完善的地方,以后慢

Quartz定时任务学习(七)Cron 触发器

Cron表达式 Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示: 位置 时间域名 允许值 允许的特殊字符 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 , - * / Cron表达式的

在线Cron表达式解析工具使用说明

在日常Java开发中,常常会用到quartz定时器,而定时器的Cron表达式比较难以理解,尤其是复杂的表达式,较难分析出是否周期频率正确. 这里,云码网推出Cron在线解析工具,方便大家在线生成Cron以及解析表达式的执行情况. 工具地址:http://www.everycoding.com/tools/cron.html 第一步.根据需求勾选执行频率,如图 第二步.点击按钮"运行",执行生成的Cron表达式,如图 通过运行控制,可看到此Cron定时器表达式未来的执行周期情况.

Quartz Cron表达式的二三事

最近在解决产品上的一个需求,就是定期生成报告(Report),我们叫做Scheduled Report. 原理:UI获取用户输入的时间信息,后台使用Spring框架设置定时任务,这里定时任务用的就是 Quartz Cron表达式. 下面介绍下我学习的Quartz Cron表达式. 1. Quartz Cron表达式和Linux Cron表达式(Cron job)有何区别? 其实语法非常像.一个大的区别时,Quartz Cron表达式提供最后一个可选参数"年",而Linux Cron表达

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

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

Quartz cron 表达式(linux 定时器,java 定时任务,spring task定时任务)

Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但还是有少许明显的区别.区别之一就是 Quartz 的格式向下支持到秒级别的计划,而 UNIX cron 计划仅支持至分钟级.许多我们的触发计划要基于秒级递增的(例如,每45秒),因此这是一个非常好的差异. 在 UNIX cron 里,要执行的作业(或者说命令)是存放在 cron 表达式中的,在第六个域位置上.Quartz 用 cron 表达式存放执行计划.引用了 cron 表达式的 CronTrigger 在计划的时间里

Java EE学习——Quartz的Cron表达式

经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比如我们想设定淘宝“秒杀”的那一秒时间,完全可以用下面的方法设置执行时间. Calendar cal = Calendar.getInstance(); //设置将要发生的时间... cal.set(Calendar.DATE, xxx); //.......常规的生成scheduler和job //

Quartz Cron表达式 在线生成器

Cron Expressions——Cron 表达式 按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数)月(0~11) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 7.年份(1970-2099) 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符.由于"月份中的日期"和"星期中

Quartz.net配置文件实例及cron表达式详解

从XML文件创建作业 最新版本的quartz.net支持直接从xml文件创建作业,使用起来很方便.配置文件的格式可以参考下面的例子 <?xml?version="1.0"?encoding="UTF-8"?><quartz?xmlns="http://quartznet.sourceforge.net/JobSchedulingData"????????xmlns:xsi="http://www.w3.org/2001