1 什么是Quartz.NET?
Quartz是一个功能齐全的开源作业调度系统,可以与几乎任何其他软件系统集成或一起使用。
2 为什么需要Quartz.NET?
.NET Framework通过System.Timers.Timer类具有“内置”计时器功能-为什么有人使用Quartz而不是这些标准功能?
原因有很多!这里有一些:
3 如何使用Quartz.NET?
首先,安装Quartz
Quartz
然后,定义一个任务类
using System;
using System.Threading.Tasks;
namespace Quartz.ConsoleApp01
{
public class HelloJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello "+DateTime.Now);
return Task.CompletedTask;
}
}
}
最后,实例化并启动调度程序,并调度要执行的作业:
using Quartz.Impl;
using System;
using System.Threading.Tasks;
namespace Quartz.ConsoleApp01
{
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("开始调度!");
//1、创建一个调度
var factory = new StdSchedulerFactory();
var scheduler = await factory.GetScheduler();
await scheduler.Start();
//2、创建一个任务
var job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
//3、创建一个触发器
var trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * * * * ?") //5秒执行一次
.Build();
await scheduler.ScheduleJob(job, trigger);
Console.ReadKey();
}
}
}
我们来看一下输出结果:
开始调度!
Hello 2021/1/19 14:37:40
Hello 2021/1/19 14:37:45
Hello 2021/1/19 14:37:50
Hello 2021/1/19 14:37:55
3 使用配置文件方式使用Quartz.NET?
首先,安装Quartz,Quartz.Plugins
Quartz
Quartz.Plugins
然后,定义一个任务类
using System;
using System.Threading.Tasks;
namespace Quartz.ConsoleApp02
{
public class HelloJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello " + DateTime.Now);
return Task.CompletedTask;
}
}
}
接着,配置quartz_jobs.xml文件
<?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>
<!--TestJob测试 任务配置-->
<job>
<name>job1</name>
<group>group1</group>
<description>job1</description>
<job-type>Quartz.ConsoleApp02.HelloJob,Quartz.ConsoleApp02</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>trigger1</name>
<group>group1</group>
<job-name>job1</job-name>
<job-group>group1</job-group>
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
最后,实例化并启动调度程序:
using Quartz.Impl;
using System;
using System.Collections.Specialized;
using System.Threading.Tasks;
namespace Quartz.ConsoleApp02
{
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("开始调度!");
//1、首先,我们必须获得对调度程序的引用
var properties = new NameValueCollection
{
["quartz.scheduler.instanceName"] = "XmlConfiguredInstance",
["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
["quartz.threadPool.threadCount"] = "5",
["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins",
["quartz.plugin.xml.fileNames"] = "~/quartz_jobs.xml",
// this is the default
["quartz.plugin.xml.FailOnFileNotFound"] = "true",
// this is not the default
["quartz.plugin.xml.failOnSchedulingError"] = "true"
};
//2、创建一个调度
var factory = new StdSchedulerFactory(properties);
var scheduler = await factory.GetScheduler();
await scheduler.Start();
Console.ReadKey();
}
}
}
4 Cron表达式
4.1 介绍
cron是已存在很长时间的UNIX工具,因此其调度功能强大且经过验证。
cron表达式是由7段构成:秒 分 时 日 月 星期 年(可选)