本系列文章是官方3.x文檔的翻譯,原文地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/index.html
目錄:
Lesson 1: 使用Quartz
Lesson 2: 任務和觸發器
Lesson 3: Jobs & JobDetails詳細介紹
Lesson 4: Triggers詳細介紹html
Quartz API的主要接口和類以下:c#
在本文中,爲了可讀性,下列說法可互換: IScheduler 和 Scheduler, IJob 和 Job, IJobDetail 和 JobDetail, ITrigger 和 Trigger.api
一個調度器的生命週期,從經過SchedulerFactory建立開始,到調用它的Shutdown()方法結束。一個IScheduler實現後,能夠使用添加、刪除、列出任務和觸發器,或者其餘調度相關的操做(例如暫停一個觸發器)。然而,如Lesson 1裏講到的,一個調度器不會真正觸發任務觸發器(執行任務)直到調用 Start()方法啓動它。less
Quartz提供定義爲領域特定語言(DSL,有時稱爲「流接口(fluent interface)」)的「構建者(builder)」類。在上一課中,你看到了它的一個例子,在這裏咱們再看其中一部分。ide
// define the job and tie it to our HelloJob class IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("myJob", "group1") // name "myJob", group "group1" .Build(); // Trigger the job to run now, and then every 40 seconds ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(40) .RepeatForever()) .Build(); // Tell quartz to schedule the job using our trigger await sched.scheduleJob(job, trigger);
這段代碼中,使用JobBuilder定義job時,使用了流接口去構建IJobDetail。一樣,使用TriggerBuilder定義trigger時,使用了流接口和返回trigger類型的擴展方法。可用的的調度擴展方法有:ui
DateBuilder 類提供了多種方法以便於構造 DateTimeOffset 實例來指定特定時間點(例如,指定爲下個小時的時間 - 換句話說,若是如今是9:43:27,指定的時間就是10:00:00)。spa
任務是一個實現了IJob接口的類,它只有一個簡單的方法。.net
IJob 接口線程
namespace Quartz { public interface IJob { Task Execute(JobExecutionContext context); } }
當任務的觸發器觸發時,調度器的其中一個工做線程會調用Execute(..)方法。傳遞給這個方法的JobExecutionContext對象提供了包含它的「運行時(run-time)」環境信息的job實例,這些信息包括訪問執行它的調度器的句柄,觸發這個操做的觸發器的句柄,任務的JobDetail對象,和一些其餘信息。翻譯
JobDetail對象是 Quartz.NET 客戶(client)(你的程序)把任務加入到調度器時產生的。它包括了多種Job的屬性,並且提供了JobDataMap,它能夠爲job類的實例存儲狀態信息。這就是job實例的本質,下一節中會更詳細的介紹。
觸發器對象用來觸發任務的執行。當你想調度一個任務時,應實例化一個觸發器並「調整」它的屬性以知足你但願的調度安排。觸發器還能夠擁有與其關聯的JobDataMap對象,這對傳遞參數給任務是很是有用的。Quartz提供了幾種不一樣類型的觸發器,但應用最多的是SimpleTrigger(ISimpleTrigger接口)和CronTrigger(ICronTrigger接口)。
若是你須要「一次性」操做(在指定時間只進行一次操做),或者在指定時間進行一次任務,並在延遲時間執行N次,那麼用SimpleTrigger是很是方便的。若是你觸發任務基於像日曆同樣的計劃,例如「每週五,中午」或「每個月10號10:15」,那麼CronTrigger是很是有用的。
爲何分開用任務和觸發器?許多任務調度器裏沒有分開的任務和觸發器的概念。其中一些簡單定義一個「任務」爲有簡單任務標誌符的一個執行時間(計劃),其餘的很像Quartz的任務和觸發器綜合到一塊兒的概念。開發Quartz時,咱們決定把計劃和在計劃中進行的工做分開是很是有意義的。這有不少好處(咱們以爲)。
例如,任務能夠獨立於觸發器,建立並存儲在任務計劃中,而且多個觸發器能夠與同一個任務關聯。另外一個低耦合的好處是,能夠配置那些關聯的觸發器已通過期,但仍然在調度器裏的任務,這使得以後不用從新定義就能夠再次調度它。這一樣容許你修改或替換一個觸發器,而不用從新定義與它關聯的任務。
任務和觸發器在註冊到Quartz調度器時能夠給定標識鍵。任務和觸發器的鍵(JobKey and TriggerKey)使得它們能夠分組,方便分類規劃你的任務和觸發器,例如「報告任務」和「維護任務」。在同一組內任務和觸發器的名稱(name)屬性必須是惟一的。話句話說,任務和觸發器的完整鍵(標識),即名稱(name)和組(group)的組合是唯一的。
你如今對任務和觸發器是什麼有了一個整體的認識,你能夠在Lesson 3: Jobs & JobDetails詳細介紹和Lesson 4: Triggers詳細介紹裏學到更多。