Ø  前言

在之前的 使用 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)   以上标注为年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分钟触发一次。号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点都会触发。分钟触发一次。

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秒触发点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 的重要知识点,要一下子记住这些配置是不太可能的。所以,还需要在以后的工作中多多运用才行。

Quartz.NET 配置文件详解的更多相关文章

  1. Spring Quartz定时器 配置文件详解

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

  2. quartz配置文件详解

    quartz配置文件详解(转载)     quartz学习总结: 一.关于job:    用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...

  3. 2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第十二章-与Spring集成(一)配置文件详解 1.pom.xml ...

  4. WebConfig配置文件详解

    今天看到博客园一位朋友整理的一个WebConfig配置文件详解,觉得不错,转载一下: <?xml version="1.0"?> <!--注意: 除了手动编辑此文 ...

  5. tomcat配置文件详解

    Tomcat系列之服务器的安装与配置以及各组件详解   tomcat 配置文件详解

  6. ubuntu nginx 安装以及配置文件详解

    1.到nginx官网下载源码包.最好下载稳定版本,nginx官网http://www.nginx.org/ 2.安装nginx依赖包运行命令: sudo apt-get install libssl- ...

  7. Spring配置文件详解 – applicationContext.xml文件路径

    Spring配置文件详解 – applicationContext.xml文件路径 Java编程                 spring的配置文件applicationContext.xml的默 ...

  8. spring配置文件详解--真的蛮详细

    spring配置文件详解--真的蛮详细   转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常 ...

  9. net-snmp配置文件详解

    net-snmp配置文件详解 net-snmp的配置文件是有一定的层次结构的,配置起来也很方便.网上找了很多资料,大概把这个配置文件的各个信息搞懂了一点.其实在net-snmp的EXAMPLE.con ...

随机推荐

  1. [SCOI2014]方伯伯的OJ(线段树)

    方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题.Oj上注册了n个用户,编号为1-n“,一开始他们按照编号排名. 方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号: 1.操作格式为 ...

  2. docker命令篇

    基础命令: 镜像: 获取镜像 $ docker pull centos:7 下拉自己仓库镜像,在后面仓库部分会讲到. 列出镜像: $ docker image ls 删除镜像: $ docker im ...

  3. JVM源码分析之一个Java进程究竟能创建多少线程

    JVM源码分析之一个Java进程究竟能创建多少线程 原创: 寒泉子 你假笨 2016-12-06 概述 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于L ...

  4. jQuery preventDefault() ,stopPropagation(),stopImmediatePropagation()

    preventDefault()函数用于阻止当前触发事件的默认行为. 在HTML文档中,当我们触发某些DOM元素的特定事件时,可以执行该元素的默认行为.比如链接的click事件:当我们点击一个链接时, ...

  5. 【洛谷P1082】同余方程

    题目大意:求关于 \(x\) 的同余方程 \[ax \equiv 1 \pmod {b}\] 的最小正整数解. 题解:exgcd 板子题. 代码如下 #include <bits/stdc++. ...

  6. win32-api: 让 static 控件中的水平横行,垂直居中。

    CreateWindowEx(....., SS_CENTER | SS_CENTERIMAGE); SS_CENTER  能让文字水平居中. SS_CENTERIMAGE 能让文字垂直居中. htt ...

  7. Summary of Java basics review data

    1.标识符      用于命名程序的对象,如方法名,变量名,规则是: a.大小写敏感 b.由英文字符,文字字符,美元符号,下划线和数字组成,但不能以数字开头 c.不能是关键字 2.%:求余运算符    ...

  8. Tomcat 下载安装与配置

    一.下载 tomcat下载链接:https://tomcat.apache.org/ 1.进入tomcat官网后,选择需要下载的版本.我使用的是tomcat9,所以在这我选择tomcat9 2.选择z ...

  9. PHP操作cookie

    1.当只有一个参数的时候,默认是删除,响应报文里面设置了一个过去的时间 setcookie('key2'); 2.当有两个参数的时候,是设置cookie setcookie('key','value1 ...

  10. Python之字符编码与文件操作

    目录 字符编码 Python2和Python3中字符串类型的差别 文件操作 文件操作的方式 文件内光标的移动 文件修改 字符编码 什么是字符编码? ''' 字符编码就是制定的一个将人类的语言的字符与二 ...