Quartz.Net调度框架配置解析
介绍
Quartz是一个常见的.NET调度框架,可以用于构建.NET应用程序的时间触发任务。Quartz.NET是Java Quartz的一个直接端口,并在.NET平台上实现了所有Java版的原始功能。
本文将详细解释如何对Quartz的常用配置进行解析。
Quartz配置基础
Quartz的配置包含多个子元素和属性,包括以下主要的基础元素:
quartz
- 根元素,包含所有子元素。property
- 属性元素,用于定义属性。add
- 添加元素,用于添加触发器和JobDetail。job
- 与job-detail
类似的元素,用于定义JobDetail。trigger
- 触发器元素,用于定义触发器。schedule
- 调度器元素,用于定义调度器。calendar
- 日历元素,用于管理特定日期和固定时间序列,以便从调度程序中排除或包括日期和时间。
属性元素 property
属性元素property
可用于定义常量值。它有两个属性name
和value
,用于指定属性名和属性值,例如:
<property name="quartz.scheduler.instanceName" value="MyScheduler" />
将此属性添加到配置文件中后,Quartz会自动按照所定义的实例名称来初始化调度器。
添加元素 add
添加元素add
非常重要,它允许将JobDetail
和Trigger
添加到应用程序中。其中,JobDetail
是指定作业的详细信息,而Trigger
则定义作业何时启动以及如何启动。
以下代码段演示如何添加一个名为myJob
的JobDetail
和一个名称为myTrigger
的Trigger
:
<add job-name="myJob"
job-group="myJobGroup"
trigger-name="myTrigger"
trigger-group="myTriggerGroup"
cron-expression="*/15 0/5 * * * ?" />
在此示例中,Quartz使用corn表达式(cron-expression
)定义任务在何时启动,上述corn表达式意味着“每15秒钟触发一次,从每小时的0分钟开始,每5分钟触发一次”。
Job元素 job
Job
元素定义了任务运行时的所有详细信息,包括任务所在程序集、任务类名、任务名称和任务组。以下是一些示例用法:
<job>
<job-detail>
<name>myJob</name>
<group>myJobGroup</group>
<job-type>MyNameSpace.MyJobClass, MyAssemblyName</job-type>
</job-detail>
</job>
上述示例将myJob
添加到名为myJobGroup
的新任务组中。
触发器元素 trigger
Trigger
元素定义了任务启动的详细信息,包括触发器的名称、触发器的组、任务的名称和任务所在的组,以及任务是否可重复执行。以下是一些示例用法:
<trigger>
<name>myTrigger</name>
<group>myTriggerGroup</group>
<job-detail>
<name>myJob</name>
<group>myJobGroup</group>
</job-detail>
<simple>
<repeat-count>-1</repeat-count>
<repeat-interval>30000</repeat-interval>
</simple>
</trigger>
上述示例将myTrigger
添加到名为myTriggerGroup
的新触发器组,并指定名称为myJob
的JobDetail
。
调度器元素 schedule
调度器元素schedule
用于定义调度器的详细信息,包括调度器的类型、线程池大小、数据存储类型等。以下是一些示例用法:
<schedule>
<factory>
<property name="quartz.scheduler.instanceName" value="MyScheduler" />
<property name="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<property name="quartz.threadPool.threadCount" value="50" />
<property name="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
</factory>
<trigger>
...
</trigger>
<trigger>
...
</trigger>
</schedule>
在此示例中,Quartz通过RAM存储(RMAJobStore
)将数据存储在内存中。配置调度器是非常关键的,因为一些错误的配置可能会导致任务不执行或配置异常。
示例一
以下是一个简单示例,它定义了包含单个触发器和单个Job的调度器:
<?xml version="1.0" encoding="UTF-8" ?>
<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0"
>
<property name="quartz.scheduler.instanceName" value="MyScheduler" />
<property name="quartz.threadPool.threadCount" value="5" />
<job>
<job-detail>
<name>MyJob</name>
<job-type>MyNameSpace.MyClass, MyAssemblyName</job-type>
</job-detail>
</job>
<trigger>
<cron>
<name>MyTrigger</name>
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</quartz>
在这个简单的示例中,调度器被定义为实例名为MyScheduler
的调度器,最多可使用5个线程,定期每5秒重复执行作业MyJob
,具体执行此Job的类名称为MyClass
,所在的程序集为MyAssemblyName
,而触发器是一个使用corn表达式指定的执行任务的计划任务。
示例二
以下是另一个Quartz配置示例,它定义了包含两个作业和两个触发器的调度程序:
<?xml version="1.0" encoding="UTF-8"?>
<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<property name="quartz.scheduler.instanceName" value="TestScheduler"/>
<property name="quartz.scheduler.instanceId" value="instance_one" />
<job>
<job-detail>
<name>job1</name>
<group>group1</group>
<job-type>MyNameSpace.MyClass, MyAssemblyName</job-type>
</job-detail>
</job>
<job>
<job-detail>
<name>job2</name>
<group>group1</group>
<job-type>MyNameSpace.MyOtherClass, MyAssemblyName</job-type>
</job-detail>
</job>
<trigger>
<simple>
<name>trigger1</name>
<group>group1</group>
<job-name>job1</job-name>
<job-group>group1</job-group>
<repeat-count>10</repeat-count>
<repeat-interval>60000</repeat-interval>
</simple>
</trigger>
<trigger>
<simple>
<name>trigger2</name>
<group>group1</group>
<job-name>job2</job-name>
<job-group>group1</job-group>
<start-time>10:00 2016-10-5</start-time>
<end-time>10:58 2016-10-5</end-time>
<repeat-count>5</repeat-count>
<repeat-interval>10000</repeat-interval>
</simple>
</trigger>
</quartz>
在这个示例中,调度器名称为TestScheduler
,具有实例Id为instance_one
。该程序包含了两个作业:job1
和job2
,并且有两个触发器。其中trigger1
是一个每间隔1分钟重复一次,总共重复10次的执行作业job1
的计划任务。与此相反,trigger2
任务将在2016年10月5日的早上10点开始,并在58分钟之后结束;这个计划任务每10秒重复一次,进行了5次。
结论
通过对Quartz配置文件的详细解释,其基础因素包括属性元素property
,添加元素add
,Job元素job
,触发器元素trigger
以及调度器元素schedule
等。
这些元素配合corn表达式,可以构建出一系列强大的Quartz计划任务,用于自动化执行各种任务。Quartz的配置文件非常灵活,可以方便地部署和维护Quartz计划任务,是.NET平台上最常用的调度框架之一。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Quartz.Net调度框架配置解析 - Python技术站