前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章。其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译一些,作为学习的历程,就记录下来,希望对大家有帮助。
一、使用 Quartz(Using Quartz)
在您使用一个调度程序之前,需要实例化一个调度程序的实例。 为此,您需要使用一个实现了ISchedulerFactory接口的子类型。
一旦调度程序被实例化,它就可以启动,然后处于待机模式,当然也可以关闭。 请注意,一旦调度程序关闭,就不能在不重新实例化的情况下重新启动它。 在调度程序启动之前,触发器不会触发(Job作业也不会执行),也不会在处于暂停状态时触发。
这是一段简洁的代码片段,用于实例化和启动调度程序,并安排执行Job作业:
使用 Quartz.NET
1 // construct a scheduler factory 2 NameValueCollection props = new NameValueCollection 3 { 4 { "quartz.serializer.type", "binary" } 5 }; 6 StdSchedulerFactory factory = new StdSchedulerFactory(props); 7 8 // get a scheduler 9 IScheduler sched = await factory.GetScheduler(); 10 await sched.Start(); 11 12 // define the job and tie it to our HelloJob class13 IJobDetail job = JobBuilder.Create<HelloJob>() 14 .WithIdentity("myJob", "group1") 15 .Build(); 16 17 // Trigger the job to run now, and then every 40 seconds18 ITrigger trigger = TriggerBuilder.Create() 19 .WithIdentity("myTrigger", "group1") 20 .StartNow() 21 .WithSimpleSchedule(x => x 22 .WithIntervalInSeconds(40) 23 .RepeatForever()) 24 .Build(); 25 26 await sched.ScheduleJob(job, trigger);
如您所见,使用Quartz.NET非常简单。
二、Job作业和触发器(Jobs And Triggers)
1、Quartz API
Quartz API的关键接口和类是:
IScheduler - 与调度程序交互的主要API。
IJob - 希望由调度程序执行的作业实现的接口,或者说Job将要完成的功能。
IJobDetail - 用于定义Jobs的实例。
ITrigger - 一个功能组件,用于定义执行给定作业的计划。
JobBuilder - 用于定义/构建JobDetail实例,用于定义Jobs的实例。
TriggerBuilder - 用于定义/构建触发器实例。
在本教程中,为了便于阅读,下面的术语可以互换使用:IScheduler和Scheduler,IJob和Job,IJobDetail和JobDetail,ITrigger和Trigger。
Scheduler 调度程序实例的生命周期因其被创建而开始,可以通过调用SchedulerFactory类型Shutdown() 方法来结束。 创建后,可以使用IScheduler接口添加、删除和列出作业和触发器,以及执行其他与调度相关的操作(例如暂停触发器)。 但是,在使用Start() 方法启动调度程序之前,调度程序实际上不会执行任何触发器(也不会执行任何作业)。
Quartz提供了“构建器(Builder)”类,用于定义该领域的特定语言(或DSL,有时也称为“fluent interface”)。在上一节中,您看到了一个示例,我们再次在此处介绍其中的一部分:
1 //定义作业并将其绑定到HelloJob类 2 IJobDetail job = JobBuilder.Create <HelloJob>() 3 .WithIdentity("myJob","

