Quartz.NET配置文件详解
Quartz.NET配置⽂件详解
Ø前⾔
在之前的⽂章中,使⽤到了 Quartz 的两个配置⽂件 fig 和 l。由于篇幅原因,没有细说,这⾥再说明下。本⼈觉得 Quertz 的强⼤之处莫过于他的配置⽂件,所以有必要深⼊理解下。
1.⾸先,说说 fig ⽂件
1)先将上⼀篇中的配置贴出来
# You can configure your scheduler in either<quartz> configuration section
# or in quartz properties file
几月几号是父亲节
# Configuration section has precedence
quartz.scheduler.instanceName = TopshelfAndQuartz
# configure thread pool info
pe = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount = 10
quartz.threadPool.threadPriority = Normal
# job initialization plugin handles our xml reading, without it defaults are used
l.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
l.fileNames = ~/l
# export this server to remoting context
#pe = Quartz.Simpl.RemotingSchedulerExporter, Quartz
#porter.port = 555
#porter.bindName = QuartzScheduler
#porter.channelType = tcp
#porter.channelName = httpQuartz
2)以上标注为红⾊的配置修改的可能性相对较⼤。
1.quartz.scheduler.instanceName 指定调度器的实例名称。
2.quartz.threadPool.threadCount 设置线程池的最⼤线程数量。
3.quartz.threadPool.threadPriority 设置作业中每个线程的优先级,可取 System.Threading.ThreadPriority 中的枚举。
4.l.fileNames 指定 Quartz 的作业配置⽂件路径及名称,以上指定为 l,默认情况下命名为该名称即
可。
3)其他的没什么说的,因为以上配置是Quartz 的标准配置,如没有特殊要求是不需要修改的。所以,这⾥⼀带⽽过,以后有必要时再
来研究它。
2.然后,是 l⽂件
1)同样,以上篇的配置为例:
<?xml version="1.0"encoding="UTF-8"?>
<!-- This file contains job definitions in schema version 2.0 format -->
<job-scheduling-data xmlns="quartznet.sourceforge/JobSchedulingData"xmlns:xsi="/2001/XMLSchem a-instance"version="2.0">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives>
<schedule>
<!--该作业⽤于定时更新商品库存-->
<job>
<name>UpdateInventoryJob</name>
<group>Update</group>
<description>定时更新商品库存</description>
<job-type>TopshelfAndQuartz.UpdateInventoryJob,TopshelfAndQuartz</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>UpdateInventoryTrigger</name>
<group>Update</group>
<job-name>UpdateInventoryJob</job-name>
<job-group>Update</job-group>
<start-time>2017-12-01T00:00:00+08:00</start-time>
<cron-expression>0 0/1 * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
2)这个配置⽂件相当重要,所有作业的调度都是由该⽂件定义的。其中最重要的节点是 cron-expression 和 repeat-interval 节点,下⾯
是每个节点的具体说明:
1.job 作业节点,每个作业则对应⼀个 job 节点。
1)name(必填)作业名称,同⼀个 group 中作业名称不能相同。
2)group(选填)作业分组名称,表⽰该作业所属分组。
3)description(选填)作业描述,⽤于描述该作业的具体功能。
4)job-type(必填)指定作业将调⽤的作业实现类,格式为:命名空间.类名,程序集名称。
5)durable(选填)表⽰该作业是否长久的,具体作⽤不详,默认为true。
6)recover(选填)字⾯意思是恢复,具体作⽤不详,默认为false。
Ø触发器可以为以下三种类型:
1)calendar-interval 这种触发器类型使⽤较少,此处省略。
2)simple简单触发器,可⽤于调度重复执⾏的作业。
1.name(必填)触发器名称,同⼀个 group 中作业名称不能相同。
3.job-name(必填)要调度的作业名称,必须与 job 节点中的 name 相同。
4.job-group(选填)要调度的作业分组名称,必须与 job 节点中的 group 相同。
5.start-time(选填)开始作业的 utc 时间,北京时间需要+08:00,例如:<start-time>2017-12-01T08:00:00+08:00</start-ti
me>,表⽰北京时间2017年12⽉1⽇上午8:00开始执⾏。注意:服务启动或重启时都会检测此属性。若没有设置此属性
或者 start-time 的时间⼩于当前时间,服务启动后会⽴即执⾏⼀次调度;若⼤于当前时间,服务会等到当前时间等于 star
t-time 的时间才开始执⾏。如果没有特殊要求,可以忽略该属性。
8.⽰例:
<simple>
<name>UpdateInventoryTrigger</name>
<group>Update</group>
<job-name>UpdateInventoryJob</job-name>
<job-group>Update</job-group>
<start-time>2017-12-01T00:00:00+08:00</start-time>
<repeat-count>3</repeat-count>
<repeat-interval>10000</repeat-interval>
</simple>
以上配置将在服务启动后,每⼗秒触发⼀次作业,共触发三次,如图:
1)cron复杂触发器,使⽤ cron-expression 设置触发器的⾏为。
1.name                与 simple 相同。
3.job-name            与 simple 相同。
4.job-group          与 simple 相同。
5.start-time          开始作业的 utc 时间,北京时间需要+08:00,例如:<start-time>2017-12-01T08:00:00+08:00</start-time>
,表⽰北京时间2017年12⽉1⽇上午8:00开始执⾏。注意:服务启动或重启时都会检测此属性。若没有设置此属性,服
务会根据cron-expression 的规则执⾏作业调度;若start-time 的时间⼩于当前时间,服务启动后会忽略 cron-expressio
n 的设置,⽴即执⾏⼀次调度,之后再根据 cron-expression 执⾏作业调度;若⼤于当前时间,服务会等到当前时间等于
start-time 的时间才开始执⾏,并根据 cron-expression 执⾏作业调度。如果没有特殊要求,可以忽略该属性。
<-expression(必填)cron 表达式,例如:<cron-expression>0 0/1 * * * ?</cron-expression>,表⽰间隔1分钟触发⼀
次。注意:该节点为必须,如果省略整个服务将不能正常运⾏!
3.详解 cron-expression 节点
Ø这个节点的设置相对复杂很多,因为所有的触发需求都是由该节点来控制,⽐如(未经测试):
1.每⽉1号1点触发⼀次,表达式:0 0 1 1 * *
2.每周⽇12点触发⼀次,表达式:0 0 12 ? * SUN
3.每天9点到18点每⼩时触发⼀次,表达式:0 0 9-18 * * ?
Ø详细说明
1.⼀个cron表达式有⾄少6个(或7个)由空格分隔的时间元素,按顺序依次为:[秒] [分] [⼩时] [⽇] [⽉] [
周] [年]
元素必填取值范围通配符
秒是          0~59                    , - * /
分是          0~59                    , - * /
时是          0~23                    , - * /
⽇是          1~31                    , - * ? / L W
⽉是          0-11 or JAN-DEC        , - * /
周是          1-7 or SUN-SAT          , - * ? / L #
年否          empty or 1970-2099      , - * /
其中,周取值:1=周⽇~7=周六,1=SUN,2=MON,3=TUE,4=WED,5=THU,6=FRI,7=SAT。
2.通配符说明:
1)*表⽰所有值,例如:分设置为"*",表⽰每⼀分钟都会触发。
2)?表⽰不指定值,使⽤场景不需要关⼼当前的这个元素。例如:要在每⽉的10号触发⼀个操作,但不关⼼是周⼏,所以周设
置为"?",具体设置为 0 0 0 10 * ?。
注意:这⾥的区间是包头包围的,⽐如配置是:0 0/1
3)- 表⽰区间,例如:在⼩时上设置"10-12",表⽰10,11,12点都会触发。注意:
5 9-22 * * ?,则表⽰9:00~22:59,每15分钟触发⼀次。
4),表⽰指定多个值(列表),例如:在周字段上设置"MON,WED,FRI",表⽰周⼀、周三、周五都会触发。
5)/⽤于递增触发,例如:在秒上⾯设置"5/15",表⽰从5秒开始,每增15秒触发⼀次(5,20,35,50)。
6)L表⽰最后的意思。在⽇字段设置上,表⽰当⽉的最后⼀天(依据当前⽉份,如果是⼆⽉还会依据是否是润年[leap]);在周
字段上表⽰星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表⽰该数据的最后⼀个。例如:在周字段上设置"6L"这样的格式,则表⽰“本⽉最后⼀个星期五”。
7)W表⽰离指定⽇期的最近那个⼯作⽇(周⼀⾄周五)。例如:在⽇字段上设置"15W",表⽰离每⽉15号最近的那个⼯作⽇触发
。如果15号正好是周六,则最近的周五(14号)触发,如果15号是周未,则最近的下周⼀(16号)触发。如果15号正好在⼯作⽇(周⼀⾄周五),则就在该天触发。如果指定格式为"1W",它则表⽰每⽉1号往后最近的⼯作⽇触发。如果1号正是周六,则将在3号下周⼀触发。(注:"W"前只能设置具体的数字,不允许区间"-")。
8)#序号,表⽰每⽉的第⼏个周⼏。例如:在周字段上设置"6#3"表⽰在每⽉的第三个周六。注意如果指定"#5",正好第五周没
有周六,则不会触发该配置(⽤在母亲节和⽗亲节再合适不过了);⼩提⽰:'L'和'W'可以⼀组合使⽤。如果在⽇字段上设置"LW",则表⽰在本⽉的最后⼀个⼯作⽇触发;周字段的设置,若使⽤英⽂字母是不区分⼤⼩写的,即MON与mon相同。
3.常⽤⽰例:
0 0 12 * * ?            每天12点触发
0 15 10 ? * *          每天10点15分触发
0 15 10 * * ?          每天10点15分触发
0 15 10 * * ? *        每天10点15分触发
0 0 12 ? * WED          每周三12点触发
0 0/30 9-17 * * ?      每天九点到⼗五店,每半⼩时触发
0 10,14,16 * * ?        每天上午10点,下午2点、4点触发
0 15 10 * * ? 2005      2005年每天10点15分触发
0 * 14 * * ?            每天下午的2点到2点59分每分触发
0 0/5 14 * * ?          每天下午的2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ?      每天下午的 2点到2点59分、18点到18点59分(整点开始,每隔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分触发
59 59 23 L * ?          每⽉最后⼀天的23点59分59秒触发(经测试)
0 15 10 ? * 6L          每⽉最后⼀周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005    从2002年到2005年每⽉最后⼀周的星期五的10点15分触发
0 15 10 ? * 6#3        每⽉的第三周的星期五开始触发
0 0 12 1/5 * ?          每⽉的第⼀个中午开始每隔5天触发⼀次
0 11 11 11 11 ?        每年的11⽉11号 11点11分触发(光棍节)
Ø总结
本篇主要详细的学习了Quartz 的相关配置,这应该是Quartz 的重要知识点,要⼀下⼦记住这些配置是不太可能的。所以,还需要在以后的⼯作中多多运⽤才⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。