天天看點

Quartz.NET 2.0 學習筆記(1) :Quartz.NET簡介

Quartz.NET 項目位址 http://quartznet.sourceforge.net/

Quartz.NET 2.0 學習筆記(1) :Quartz.NET簡介

Quartz.NET 2.0 學習筆記(2) :和1.0的幾點不同

Quartz.NET 2.0 學習筆記(3) :通過配置檔案實作任務排程

Quartz.NET 2.0 學習筆記(4) :cron表達式

Quartz.NET 2.0 學習筆記(5) :執行個體建立Windows服務實作任務排程

Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,它可以與J2EE與J2SE應用程式相結合也可以單獨使用。Quartz可以用來建立簡單或為運作十個,百個,甚至是好幾萬個Jobs這樣複雜的日程式表。Jobs可以做成标準的Java元件或 EJBs。Quartz的最新版本為Quartz 2.10。

     Quartz是一個完全由java編寫的開源作業排程架構。不要讓作業排程這個術語吓着你。盡管Quartz架構整合了許多額外功能, 但就其簡易形式看,你會發現它易用得簡直讓人受不了!。簡單地建立一個實作org.quartz.Job接口的java類。Job接口包含唯一的方法: 

  public void execute(JobExecutionContext context) 

  throws JobExecutionException; 

  在你的Job接口實作類裡面,添加一些邏輯到execute()方法。一旦你配置好Job實作類并設定好排程時間表,Quartz将密切注意剩餘時間。當排程程式确定該是通知你的作業的時候,Quartz架構将調用你Job實作類(作業類)上的execute()方法并允許做它該做的事情。無需報告任何東西給排程器或調用任何特定的東西。僅僅執行任務和結束任務即可。如果配置你的作業在随後再次被調用,Quartz架構将在恰當的時間再次調用它。

     Quartz.NET是一個開源的作業排程架構,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#寫成,可用于winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而建立簡單的或複雜的排程。它有很多特征,如:資料庫支援,叢集,插件,支援cron-like表達式等等。

  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

參考文章:

  • Quartz.NET - Version Migration Guide 
  • Java Quartz's documentation .

該文章主要内容來自

http://www.cnblogs.com/topcoder/archive/2012/02/22/2362819.html

http://www.cnblogs.com/shanyou/archive/2011/10/15/2213636.html

注:此文章屬懶惰的肥兔原創,版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接

若您覺得這篇文章還不錯請點選下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝。

如有問題,可以通過[email protected]聯系我。

Quartz.NET 2.0 學習筆記(1) :Quartz.NET簡介

Quartz.NET 2.0 學習筆記(2) :和1.0的幾點不同

Quartz.NET 2.0 學習筆記(3) :通過配置檔案實作任務排程

Quartz.NET 2.0 學習筆記(4) :cron表達式

Quartz.NET 2.0 學習筆記(5) :執行個體建立Windows服務實作任務排程