quzrtz 2.0 定时任务
Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。
Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。
参考
官方学习文档:http://www.quartz-scheduler.net/documentation/index.html
使用实例介绍:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
我们需要明白 Quartz 的几个核心概念,这样理解起 Quartz 的原理就会变得简单了。
1.Job 表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:
void execute(JobExecutionContext context)
2。JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
3.Trigger 代表一个调度参数的配置,什么时候去调。
4.Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
先在一个运行函数里建立调度器和任务,任务属性,HelloJob是一个单独任务定时执行
namespace quartzWinform
{
public class Program
{
//调度器
public static IScheduler scheduler;
//调度器工厂
public static ISchedulerFactory factory;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
protected static void Main(string[] args)
{
1、创建一个调度器
factory = new StdSchedulerFactory();
scheduler = factory.GetScheduler();
scheduler.Start();
2、创建一个任务
IJobDetail job = JobBuilder.Create<HelloJob>().WithIdentity("job1", "group1").Build();
3、创建一个触发器
DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * * * * ?") //5秒执行一次
.StartAt(runTime)
.Build();
4、将任务与触发器添加到调度器中
scheduler.ScheduleJob(job, trigger);
5、开始执行
scheduler.Start();
}
}
}
HelloJob继承IJob,实现execute方法,自动运行
using log4net; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace QuartzDemo.QuartzJobs { public sealed class TestJob : IJob { private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob)); public void Execute(IJobExecutionContext context) { _logger.InfoFormat("TestJob测试"); } } }
ps: .Net Framework 4 和 .Net Framework 4.6 都支持Quartz 2.3.2和Topshelf3.0.2