Quartz.NET是一个强大的开源任务调度库,可以通过配置文件方便地进行任务配置。使用配置文件的优点在于可以将任务的调度信息与代码分离,使得任务配置更加灵活,并且可以在不修改代码的情况下进行调度策略的调整。以下是一个简单的配置文件示例,以及详细的讲解、步骤、方法和注意事项。
<?xml version="1.0" encoding="utf-8"?>
<job-scheduling-data xmlns="https://quartznet.sourceforge.net/JobSchedulingData"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
version="2.0">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives>
<schedule>
<job>
<name>Job1</name>
<group>JobGroup</group>
<description>Job1 Description</description>
<job-type>Sample_Quartz2.Job1, Sample_Quartz2</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>Job1Trigger</name>
<group>JobGroup</group>
<description>Job1每2秒执行一次</description>
<job-name>Job1</job-name>
<job-group>JobGroup</job-group>
<cron-expression>0/2 * * * * ?</cron-expression>
</cron>
</trigger>
<job>
<name>Job2</name>
<group>JobGroup</group>
<description>Job2 Description</description>
<job-type>Sample_Quartz2.Job2, Sample_Quartz2</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>Job2Trigger</name>
<group>JobGroup</group>
<description>Job2每5秒执行一次</description>
<job-name>Job2</job-name>
<job-group>JobGroup</job-group>
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
配置文件结构解释:
configSections
: 定义配置文件的部分。quartz
: Quartz.NET的配置部分,定义调度器、线程池、和作业存储等信息。schedule
: 定义作业和触发器的配置信息。配置项解释:
quartz.scheduler.instanceName
: 调度器的实例名称。quartz.threadPool.type
: 线程池类型。quartz.threadPool.threadCount
: 线程池中线程的数量。quartz.jobStore.type
: 作业存储类型。作业(Job)和触发器(Trigger)配置:
jobType
指定作业的类型(完整类型名)。cronExpression
定义触发器的调度规则。注意事项:
下面是一个简单的作业实现(Job1.cs和Job2.cs),以及一个用于启动调度器的实例(SchedulerExample.cs)。
using Quartz;
using System;
namespace MyNamespace
{
public class Job1 : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Job 1 is running at: " + DateTime.Now);
}
}
}
using Quartz;
using System;
namespace MyNamespace
{
public class Job2 : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Job 2 is running at: " + DateTime.Now);
}
}
}
using Quartz;
using Quartz.Impl;
using System;
namespace QuartzExample
{
class SchedulerExample
{
static void Main(string[] args)
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = schedulerFactory.GetScheduler().Result;
//加载配置文件
XMLSchedulingDataProcessor xMLSchedulingDataProcessor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
xMLSchedulingDataProcessor.ProcessFileAndScheduleJobs(AppDomain.CurrentDomain.BaseDirectory + "/quartz_jobs.xml", scheduler);
// 启动调度器
scheduler.Start();
Console.WriteLine("Scheduler started at: " + DateTime.Now);
// 关闭调度器
//scheduler.Shutdown();
Console.ReadKey();
}
}
}
运行效果:
这个例子演示了如何使用Quartz.NET创建两个简单的作业,并通过配置文件指定调度规则。在实际应用中,你需要根据具体需求更改作业的逻辑和配置文件中的调度规则。
源代码获取:公众号回复消息【code:88736
】