想必大家在项目中处理简单的后台持续任务或者定时触发任务的时候均使用 Thread 或者 Task 来完成,但是项目中的这种需求一旦多了的话就得将任务调度引入进来了,那今天就简单的介绍一下 Quartz.NET 基于 Windows 服务宿主是怎样配置使用的。
Quartz.NET 是一个优秀的任务调度框架,,移植于 Java 版的 Quartz 。
官网:
Github:https://github.com/quartznet/quartznet
示例环境
- .Net 4.5.2
- Quartz 2.4.1
- Common.Logging 3.3.1
- log4net 2.0.5
- Common.Logging.Log4Net1213 3.3.1
源码地址:https://github.com/Wlitsoft/QuartzNETWinServiceSample
配置
1. quartz.config
这个配置文件需要放在服务运行根目录下,用于指定 quartz 的一些运行配置,比如调度名称、线程池实现组件、线程池大小、任务配置文件路径等。
1 # You can configure your scheduler in either <quartz> configuration section 2 # or in quartz properties file 3 # Configuration section has precedence 4 5 quartz.scheduler.instanceName = QuartzNETWinServiceScheduler 6 7 # configure thread pool info 8 quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz 9 quartz.threadPool.threadCount = 10 10 quartz.threadPool.threadPriority = Normal 11 12 # job initialization plugin handles our xml reading, without it defaults are used 13 quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz 14 quartz.plugin.xml.fileNames = ~/Conf/jobs.config
暂时需求需要修改的只有一处,看最后一行 quartz.plugin.xml.fileNames = ~/Conf/jobs.config 指定任务的配置文件路径。
2. 任务配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- This file contains job definitions in schema version 2.0 format --> 3 <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> 4 5 <processing-directives> 6 <overwrite-existing-data>true</overwrite-existing-data> 7 </processing-directives> 8 9 <schedule> 10 <job> 11 <name>Job1</name> 12 <group>Jobs</group> 13 <description>任务1</description> 14 <job-type>Wlitsoft.ProjectSample.QuartzNETWinService.Job.Job1,QuartzNETWinService</job-type> 15 <durable>true</durable> 16 <recover>false</recover> 17 </job> 18 <trigger> 19 <simple> 20 <name>Job1Trigger</name> 21 <group>Jobs</group> 22 <description>每 30 秒执行一次</description> 23 <job-name>Job1</job-name> 24 <job-group>Jobs</job-group> 25 <repeat-count>-1</repeat-count> 26 <repeat-interval>30000</repeat-interval> 27 </simple> 28 </trigger> 29 </schedule> 30 </job-scheduling-data>
以下为配置文件属性:
- 任务 (job 节点)
simple 节点项说明名称 类型 是否必填 默认值 描述
name string Y 触发器名称
group string N 默认组名 触发器名称
description string N 触发器描述
job-name string Y 要触发的任务的名称
job-group string Y 要触发的任务的组名称
durable boolean N false 任务完成后是否依然保存到数据库
recover boolean N false 应用或服务重启之后是否忽略过期任务
- 触发器 (trigger 节点)
下面说下最常用的两种触发器: