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