前面講了一些Quartz.net 的一些東西, http://www.cnblogs.com/zhangweizhong/category/771057.htmlhtml
可是發現有一些基礎的東西,沒有說到。Quartz.net 裏面一些個基本的元素,好比Jobs,Triggers等。api
Quartz API 的接口和類主要有:ui
一個Scheduler調度的生命週期從開始建立,到結束關閉,都是經過SchedulerFactory 實現的。當咱們建立了IScheduler接口後,咱們就能夠用來add、remove、或者list jobs和triggers,或者是其餘與調度相關的工做。編碼
Scheduler 調度的方法有:spa
使用DateBuilder能夠輕鬆的構建特定的執行時間點等,以下個小時、十點鐘、或者是其餘的具體時間方式。.net
定義一個job必須實現了IJob接口,以下爲IJob接口的方法:線程
namespace Quartz { public interface IJob { void Execute(JobExecutionContext context); } }
當 Job的trigger被觸發後,scheduler調度的線程 就會執行 Execute 方法,同時 JobExecutionContext 包含運行環境參數等信息也會傳遞給execute方法。code
好比說:job能夠建立並存儲在獨立的scheduler調度中並由Trigger觸發,不一樣的Trigger觸發器能夠觸發相同的job任務。這種鬆耦合可以保證若是Job的觸發規則變了,不用去該job,而只需修改某個Trigger的觸發規則。同時,配置在scheduler調度中的job任務任然是能夠被其餘觸發器使用,而不須要咱們從新定義新的job任務。htm
接下來須要咱們瞭解知道的job深刻內容主要有IJob接口的Execute()方法和JobDetails。對象
對於一個job任務來講,咱們知道如何制定特定type類型和如何編寫實現一個job的代碼,對於使用Quartz.NET來講咱們須要瞭解它各類各樣的屬性參數,能夠經過job的JobDetail明細類來進行分析。
JobDetail明細類的實例是經過JobBuilder建立的,JobBuilder容許咱們使用連續的接口方式進行實現和編碼。
// 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 sched.scheduleJob(job, trigger);
接下來定義一個job實現類HelloJob:
public class HelloJob : IJob { public void Execute(IJobExecutionContext context) { Console.WriteLine("HelloJob is executing."); } }
說到這裏,有些 job任務是須要設置一些屬性或者參數的 ,怎麼給運行中的Job賦值呢? JobDataMap 提供了這方面的實現,也就是在 JobDetail對象中,設置job須要的值或參數。
JobDataMap能夠存儲容納任意數量的可序列化對象,以便在job實例化執行的時候使用。JobDataMap是IDictionary接口的實現,並添加了一些方便存儲和檢索原始類型數據的方法。
下面演示一小段代碼來講明將job任務添加到scheduler調度前先將數據添加到JobDataMap:
Setting Values in a JobDataMap
// define the job and tie it to our DumbJob class IJobDetail job = JobBuilder.Create<DumbJob>() .WithIdentity("myJob", "group1") // name "myJob", group "group1" .UsingJobData("jobSays", "Hello World!") .UsingJobData("myFloatValue", 3.141f) .Build();
下面演示下job任務執行時候從JobDataMap中取出數據的代碼片斷:
Getting Values from a JobDataMap
public class DumbJob : IJob { public void Execute(JobExecutionContext context) { JobKey key = context.JobDetail.Key; JobDataMap dataMap = context.JobDetail.JobDataMap; string jobSays = dataMap.GetString("jobSays"); float myFloatValue = dataMap.GetFloat("myFloatValue"); Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue); } }
有了JobDataMaps Job在執行的過程當中,就能夠取出須要的相關參數。