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.ide

 

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

 

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

 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 => x
11             .WithIntervalInSeconds(40)
12             .RepeatForever())            
13         .Build();
14         
15     // Tell quartz to schedule the job using our trigger
16     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)3d

Jobs and Triggers

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

IJob Interface对象

1 namespace Quartz
2     {
3         public interface IJob
4         {
5             void Execute(JobExecutionContext context);
6         }
7 }

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

当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被包含在一个组里。

相关文章
相关标签/搜索