IScheduler—與scheduler交互的主要的接口
IJob—這個接口主要定義scheduler執行內容
IJobDetail—用於定義Jobs實例
ITrigger—定義scheduler怎麼去執行Job
JobBuilder –用於定義構建JobDetail實力,哪一個定義爲Jobs的實例
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
View Code1 // 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)在構建Job的代碼塊的時候使用JobBuilder ,使用fluent interfac建立這個接口IJobDetail。一樣構建trigger代碼塊使用TriggerBuilder’s 的fluent interface並調用擴展方法指定trigger 類型。可用得時間延長方法有:線程
- WithCalendarIntervalSchedule
- WithCronSchedule
- WithDailyTimeIntervalSchedule
- WithSimpleSchedule
DateBuilder 類中包含了各類方便構建DateTimeOffset 實例的方法。(例如表示一個偶數的小時換個具體點時間10:00:00當前是9:43:27)3d
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。
Jobs和tirggers允許在註冊到Quartz scheduler定義key。這些key是頗有用的在組織管理jobs和tirggers。對於組key相同的jobs和tiggers被包含在一個組裏。