天天看點

Quartz.NET 2.0與以前版本的改進

2012年4月9日 Quartz.NET 2.0釋出了Released版,對應于Java Quartz的2.1版本,下載下傳位址 ​​http://quartznet.sourceforge.net/download.html​​ 。整個版本相對于1.0版本進行了大量的修改,單元測試的代碼更友好(重構了更多的接口),API是基于泛型和.NET 3.5 SP1之後的特性,例如DateTimeOffset。這是Quartz.NET 有史以來最大的、最值得興奮的一個版本。

該版本除了在性能上有所提升外,增加了如下新特性:

  • Scheduler.Clear() 提供友善用于清除所有任務、觸發器和日程的方法
  • Scheduler.ScheduleJobs((IDictionary> triggersAndJobs, boolean replace) 方法可批量增加任務和觸發器
  • Scheduler.UnscheduleJobs(IList triggerKeys) 方法提供批量取消任務的
  • Scheduler.DeleteJobs(IList jobKeys),不用說,這是批量删除任務的
  • Scheduler.CheckExists(JobKey jobKey) 和 Scheduler.CheckExists(TriggerKey triggerKey)提供用于檢測任務關鍵字的唯一性
  • AdoJobStore allows one set of tables to be used by multiple distinct scheduler instances
  • AdoJobStore is now capable of storing non-core Trigger implementations without using BLOB columns, through the use of the new TriggerPersistenceDelegate interface, which can (optionally) be implemented by implementers of custom Trigger types.
  • Cron 表達式支援指定每月的最後一天和最後一周,例如 L-3 為每月的最後三天
  • 包含排程資訊的 XML 檔案增加了用來指定啟動時間和間隔時間的方法
  • XML 檔案支援為觸發器指定 priority 屬性
  • 增加核心任務 DirectoryScanJob ,之前的FileScanJob 添加了一個迷你mum age參數

2.0在API上也做了重大的修改,API傳回值的集合和泛型的使用,消除歧義和備援代碼,掩藏/删除不應該公開給用戶端的方法,提高關注點分離,并引入與領域特定語言DSL的核心實體(jobs and triggers),自然就有了相容性等問題,我們現在來看下都有哪些重大的修改:

  • 不在支援.NET 1.1和2.0,需要Quartz.net 2.0至少需要.NET 3.5 SP1,是由于采用了新的語言特性和類接口
  • 許多公共接口的傳回值Array更改為泛型的IList和ISet,例如GetJobGroupNames(): string[] 現在更改為 GetJobGroupNames(): IList ,現在用來辨別Jobs和Triggers 現在是基于JobsKey和TriggersKey,Keys 包含一個Name和一個Group。操作特定jobs/triggers 的方法使用Keys作為參數。例如GetTrigger(TriggerKey key): ITrigger 替換了GetTrigger(string name, string group): Trigger,ITrigger現在是一個接口而不是類。ISimpleTrigger, ICronTrigger也一樣。新的 DSL/builder-based API 組織Jobs和Triggers。

     IJobDetail job = JobBuilder.Create<SimpleJob>() .WithIdentity("job1", "group1") .Build();

     ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartAt(DateBuilder.FutureDate(2, IntervalUnit.HOURS)) .WithSimpleSchedule(x => x.RepeatHourlyForever()) .ModifiedByCalendar("holidays") .Build();

  • JobInitializationPlugin 已經移除,用XMLSchedulingDataProcessorPlugin替代
  • Microsoft's Oracle drivers已經不再支援,使用10g 或者 11g ODP.NET drivers替代
  • 資料庫的Sechema已經修改,需要使用database目錄下的腳本吧1.x的Schema更新到2.0

變化一 比1.0多引用了C5.dll

C5.dll 一個C#和其他CLI語言的泛型集合類。.Net2.0及以上才可以使用。簡介位址:http://www.itu.dk/research/c5/

變化二 quartz.config有細微變化

  • quartz.plugin.xml.type由1.x的Quartz.Plugin.Xml.JobInitializationPlugin, Quartz變為了2.0中的Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
  • 2.0版本新增了一行配置quartz.scheduler.exporter.channelName = httpQuart

變化三 實作IJob接口 JobExecutionContext對象變成了IJobExecutionContext 

變化四 quartz_jobs.xml配置節發生了變化

變化五 支援.Net版本不同

  • Quartz 1.0可以支援.Net 1.1 和 .Net 2.0及以上版本 
  • Quartz 2.0僅支援.Net 3.5及以上版本,放棄了對.Net 1.1和.Net 2.0的支援