Ø  前言

在之前的 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务 文章中,使用到了 Quartz 的两个配置文件 quartz.config 和 quartz_jobs.xml。由于篇幅原因,没有细说,这里再说明下。本人觉得 Quertz 的强大之处莫过于他的配置文件,所以有必要深入理解下。

1.   首先,说说 quartz.config 文件

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

quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz

quartz.threadPool.threadCount = 10

quartz.threadPool.threadPriority = Normal

# job initialization plugin handles our xml reading, without it defaults are used

quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz

quartz.plugin.xml.fileNames = ~/quartz_jobs.xml

# export this server to remoting context

#quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz

#quartz.scheduler.exporter.port = 555

#quartz.scheduler.exporter.bindName = QuartzScheduler

#quartz.scheduler.exporter.channelType = tcp

#quartz.scheduler.exporter.channelName = httpQuartz

2)   以上标注为红色的配置修改的可能性相对较大。

1.   quartz.scheduler.instanceName 指定调度器的实例名称。

2.   quartz.threadPool.threadCount 设置线程池的最大线程数量。

3.   quartz.threadPool.threadPriority 设置作业中每个线程的优先级,可取 System.Threading.ThreadPriority 中的枚举。

4.   quartz.plugin.xml.fileNames 指定 Quartz 的作业配置文件路径及名称,以上指定为 quartz_jobs.xml,默认情况下命名为该名称即可。

3)   其他的没什么说的,因为以上配置是 Quartz 的标准配置,如没有特殊要求是不需要修改的。所以,这里一带而过,以后有必要时再来研究它。

2.   然后,是 quartz_jobs.xml文件

1)   同样,以上篇的配置为例:

<?xml version="1.0" encoding="UTF-8"?>

<!-- This file contains job definitions in schema version 2.0 format -->

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-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。

2.   trigger 作业触发器节点,用于定义指定的作业以何种方式触发,一个作业可以有多个触发器,而每个触发器都独立执行调度。

Ø  触发器可以为以下三种类型:

1)   calendar-interval 这种触发器类型使用较少,此处省略。

2)   simple 简单触发器,可用于调度重复执行的作业。

1.   name(必填)        触发器名称,同一个 group 中作业名称不能相同。

2.   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-time>,表示北京时间2017年12月1日上午8:00开始执行。注意:服务启动或重启时都会检测此属性。若没有设置此属性或者 start-time 的时间小于当前时间,服务启动后会立即执行一次调度;若大于当前时间,服务会等到当前时间等于 start-time 的时间才开始执行。如果没有特殊要求,可以忽略该属性。

6.   repeat-count(选填)表示作业重复执行次数,-1表示无限制重复执行,3 表示作业重复执行三次。

7.   repeat-interval(必填)表示作业触发间隔时间,10000 表示十秒触发一次,单位:毫秒。

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 相同。

2.   group               与 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-expression 的设置,立即执行一次调度,之后再根据 cron-expression 执行作业调度;若大于当前时间,服务会等到当前时间等于 start-time 的时间才开始执行,并根据 cron-expression 执行作业调度。如果没有特殊要求,可以忽略该属性。

6.   cron-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 * ?。

3)   - 表示区间,例如:在小时上设置"10-12",表示10,11,12点都会触发。注意:这里的区间是包头包围的,比如配置是:0 0/15 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 的重要知识点,要一下子记住这些配置是不太可能的。所以,还需要在以后的工作中多多运用才行。

转载于:https://www.cnblogs.com/abeam/p/8044460.html

Quartz.NET 配置文件详解相关推荐

  1. quartz.properties配置文件详解

    我们通常是通过quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory 来使用Quartz的.StdSchedulerFactory 会加载属 ...

  2. quartz定时器依赖_Spring Quartz定时器 配置文件详解

    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等. 我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作, ...

  3. mybatis mysql 配置文件_Mybatis配置文件详解(4)

    本次主要来了解: MyBatis数据库配置文件SqlMapConfig.xml SQL映射配置中输入映射的配置 SQL映射配置中输出映射的配置 SQL映射配置中动态SQL语句的配置 1. SqlMap ...

  4. MyBatis复习笔记2:配置文件详解

    配置文件详解 属性(properties) MyBatis可以使用 properties 来引入外部 properties 配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或 ...

  5. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解

    前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...

  6. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  7. CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解

    Haproxy配置 永久修改名字:便于区分虚拟机! Haproxy:hostnamectl set-hostname haproxy Web1: hostnamectl set-hostname WE ...

  8. 用户管理 之 用户(User)和用户组(Group)配置文件详解

    作者:北南南北 来自:LinuxSir.Org 摘要:本文详解用户(User)和用户组(Group)的配置文件,本文是<Linux 用户(User)和用户组(Group)管理概述>文档的关 ...

  9. 【ZooKeeper】配置文件详解

    ZooKeeper的配置文件详解 zkServer.sh读取的默认配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg.如果要用其它配置文件.如下传递配置文件参数: zkServer.s ...

  10. vsftpd配置文件详解

      1.默认配置: 1>允许匿名用户和本地用户登陆.      anonymous_enable=YES      local_enable=YES 2>匿名用户使用的登陆名为ftp或an ...

最新文章

  1. mysql同时购买两种商品_SQL题1——查询所有购入商品为两种或两种以上的购物人记录...
  2. Java 类的热替换---转载
  3. 美国国防部选择VMware View用于全球作战系统
  4. Java ist reverse_charist.js响应
  5. 【Hadoop系列】HDFS
  6. KXD黑夜模式流星滑落个人主页HTML源码
  7. iis属于中间件吗_今天设计一套高可用高并发、海量存储可伸缩的消息中间件生产架构...
  8. 总结better-scroll插件的使用
  9. 计算机网络第三章课后答案第七版(谢希仁著)
  10. vue3.0开发环境搭建及vue2.x和vue3.x的区别
  11. 【程序设计训练】1-7 F1方程式冠军
  12. 23种设计模式11---享元模式
  13. python 下载m3u8视频_python 下载m3u8视频的示例代码
  14. 650 storm 铃木v_V双暴风雨 2018款铃木V-Strom 650/650XT
  15. html人物属性代码,辐射4初始人物超强属性代码一览
  16. 苹果ios签名过期了,APP应用还能照常使用吗?
  17. 手机浏览网页或打开App时莫名弹出支付宝领红包界面的原因及应对措施
  18. java 批注框_Java 回复Word批注
  19. 待我兵临城下,许你半世繁华
  20. 牛客-埃森哲杯第十六届上海大学程序设计联赛-A-Wasserstein Distance

热门文章

  1. IDEA集成SVN代码管理常用功能
  2. 微波工程(第三版)中关于史密斯圆图部分总结
  3. sqlserver 执行计划
  4. javaswing个人记账系统 java swing mysql实现的个人记账系统源码(1012)
  5. IBM SPSS Statistics 25 安装教程
  6. 留言板php数据库_php实现留言板功能(连接数据库)的实例讲解
  7. SpringBoot修改内置tomcat版本
  8. python代码的注释只有一种方式、那就是使用#符号_知到智慧树营养与食疗学多选题答案...
  9. Coin3D三维可视化教程3
  10. 6-14漏洞利用-rpcbind漏洞利用