首页 > 代码库 > Quartz 第二课 Jobs and Triggers(官方文档翻译)

Quartz 第二课 Jobs and Triggers(官方文档翻译)

The Quartz API

  1. IScheduler—与scheduler交互的主要的接口
  2. IJob—这个接口主要定义scheduler执行内容
  3.  IJobDetail—用于定义Jobs实例
  4. ITrigger—定义scheduler怎么去执行Job
  5. JobBuilder –用于定义构建JobDetail实力,哪个定义为Jobs的实例
  6. TriggerBuilder—用于定义和构建Trigger 实例

为了更好的可读性,以下术语交替使用: IScheduler and Scheduler, IJob and Job, IJobDetail and JobDetail, ITrigger and Trigger.

 

Scheduler的生命周期是从它创建开始通过SchedulerFactory 到调用 Shutdown()后结束。一旦Scheduler被创建,就可以调用add和remove方法来添加和移除Jobs和Triggers以及其它调度相关的操作(例如暂停trigger)。如果没有调用 Start()方法,Scheduler并不会在任何triggers 下执行任何jobs。

 

Quartz定义一种自己的特定语言格式(称为DSL或者是fluent interface)在上一节中已经看见这么使用它的例子,让我们再看一次。

技术分享
 1 // define the job and tie it to our HelloJob class 2     IJobDetail job = JobBuilder.Create<HelloJob>() 3         .WithIdentity("myJob", "group1") // name "myJob", group "group1" 4         .Build(); 5          6     // Trigger the job to run now, and then every 40 seconds 7     ITrigger trigger = TriggerBuilder.Create() 8         .WithIdentity("myTrigger", "group1") 9         .StartNow()10         .WithSimpleSchedule(x => x11             .WithIntervalInSeconds(40)12             .RepeatForever())            13         .Build();14         15     // Tell quartz to schedule the job using our trigger16     sched.scheduleJob(job, trigger)
View Code

在构建Job的代码块的时候使用JobBuilder ,使用fluent interfac创建这个接口IJobDetail。同样构建trigger代码块使用TriggerBuilder’s 的fluent interface并调用扩展方法指定trigger 类型。可用得时间延长方法有:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

DateBuilder 类中包含了各种方便构建DateTimeOffset 实例的方法。(例如表示一个偶数的小时换个具体点时间10:00:00当前是9:43:27)

Jobs and Triggers

Job实现IJob 接口,接口里面仅有一个简单的方法

IJob Interface

1 namespace Quartz2     {3         public interface IJob4         {5             void Execute(JobExecutionContext context);6         }7 }

当trigger 触发时,scheduler’的线程调用Execute()方法。 JobExecutionContext 对象提供了Job实例以及运行时的环境信息由Scheduler 去执行,一个Trigger 被触发对于此次执行还包含JobDetail 对象以及其它项。

当scheduler添加一个Job的时候,scheduler会创建JobDetail 对象。它包含了Job的各种属性设置,作为一个JobDataMap保存,它可以用来存储状态信息为Job实例。它本质上是作业job的定义。细节在下一节课进行了讨论。

触发对象用于触发Job的执行。当您希望执行一个job,你实例化一个trigger 和‘调‘其属性为您希望调度。触发器也可能有一个与之相关的JobDataMap的 - 这是将参数传递给job特定于触发器的发用的。Quartz 附带常用的trigger 类型,,最常用的类型有SimpleTrigger(ISimpleTrigge接口r)和CronTrigger(ICronTrigger接口)。

SimpleTrigger是最方便的,如果你需要‘一次性‘执行(在给定时刻的job只是单一的执行),或者如果你需要在给定时间工作,并将其重复N次,延迟T执行之间。如果您希望基于日历般的时间触发CronTrigger是有用的 - “每月10日10:15”,“每个星期五,中午”。

为什么要有jobs和Triggers呢?许多 job schedulers并没有 jobs and triggers概念。一些定义“job”作为简单地用一些小job标识符沿执行时间(或计划)。其他人则很像Quartz’s job and trigger 对象集合。在开发Quartz,我们认为这是有意义的创建要在这个时间表执行的时间表和工作之间的分离。这样做(在我们看来)很多好处。

例如,Jobs可以被创建并能独立存储在 job scheduler,并且许多triggers 可以用相同的job相关联。这种松耦合的另一个好处是配置留在调度之后它们相关的触发器已过期,所以它可在以后重新安排的job,而不必重新定义它。它也可以让你无需重新定义其关联的job修改或替换Tirgger。

 

Identities

Jobs和tirggers容许在注册到Quartz scheduler定义key。这些key是很有用的在组织管理jobs和tirggers。对于组key相同的jobs和tiggers被包含在一个组里。

Quartz 第二课 Jobs and Triggers(官方文档翻译)