Quartz.NET是一個開源的做業調度框架,很是適合在平時的工做中,定時輪詢數據庫同步,定時郵件通知,定時處理數據等。 數據庫
Quartz.NET容許開發人員根據時間間隔(或天)來調度做業。它實現了做業和觸發器的多對多關係,還能把多個做業與不一樣的觸發器關聯。框架
整合了 Quartz.NET的應用程序能夠重用來自不一樣事件的做業,還能夠爲一個事件組合多個做業。spa
官網:http://www.quartz-scheduler.net/.net
下面結合個人項目中的使用給你們分享:blog
包括如下技術點:單一實例模式、NLog使用方法、模板類、抽象類、抽象方法、接口、Cron表達式接口
首先,咱們先起一個模板類JobService,定義抽象的操做,實現類本身經過重寫GetTrigger()去定義觸發的時間。事件
接下來,咱們來看看一個實現類ExpiredSessionsJobService,它定義了每60秒就觸發一次,固然這個時間定義,咱們還能夠用Cron表達式,能夠用這類寫法:開發
ICronTrigger CronTrigger = new Quartz.Impl.Triggers.CronTriggerImpl(JobName, GroupName, "0/60 * * * * ?");同步
quartz中的cron表達式和Linux下的很相似,好比 "/5 * * ? * * *" 這樣的7位表達式,最後一位年非必選。it
表達式從左到右,依此是秒、分、時、月第幾天、月、周幾、年。下面表格是要遵照的規範:
」0 0 10,14,16 * * ?" 天天10點,14點,16點 觸發。
"0 0/5 14,18 * * ?" 天天14點或18點中,每5分鐘觸發 。
字段名 | 容許的值 | 容許的特殊字符 |
---|---|---|
Seconds | 0-59 | , - * / |
Minutes | 0-59 | , - * / |
Hours | 0-23 | , - * / |
Day of month | 1-31 | , - * ? / L W |
Month | 1-12 or JAN-DEC | , - * / |
Day of week | 1-7 or SUN-SAT | , - * ? / L # |
Year | 空, 1970-2099 | , - * / |
特殊字符 | 解釋 |
, | 或的意思。例:分鐘位 5,10 即第5分鐘或10分都觸發。 |
/ | a/b。 a:表明起始時間,b頻率時間。 例; 分鐘位 3/5, 從第三分鐘開始,每5分鐘執行一次。 |
* | 頻率。 即每一次波動。 例;分鐘位 * 即表示每分鐘 |
- | 區間。 例: 分鐘位 5-10 即5到10分期間。 |
? | 任意值 。 即每一次波動。只能用在DayofMonth和DayofWeek,兩者衝突。指定一個另外一個一個要用? |
L | 表示最後。 只能用在DayofMonth和DayofWeek,4L即最後一個星期三 |
W | 工做日。 表示最後。 只能用在DayofWeek |
# | 4#2。 只能用DayofMonth。 某月的第二個星期三 |
具體的業務處理類是ExpiredSessionsJob,它必須實現IJob,Execute方法爲具體業務方法,實現做業的內容;
咱們還能夠新建一個ASP.NET WEBSITE,並引入CrystalQuartz.Remote包,生成後臺可監控的管理平臺。