通過上一篇文章,相信大家對Quartz.Net有了基本的了解,並可以建立最簡單的服務了。本篇將着重講解其中的Trigger,也就是如何設定服務的觸發條件。
按照情景,我在工作中一般會遇到以下幾種情景
1.服務開始時執行
這個Trigger我們在上篇的實例中已經使用過,話不多說,直接上代碼
ITrigger trigger = TriggerBuilder.Create().StartNow().Build()
2.在指定時間間隔內輪詢執行
利用框架中自帶的SimpleTriggerImpl,就能輕松實現這類型觸發器構造,下面列出常用的幾個構造重載:
- SimpleTriggerImpl(string name, int repeatCount, TimeSpan repeatInterval)
- SimpleTriggerImpl(string name, DateTimeOffset startTimeUtc, DateTimeOffset? endTimeUtc, int repeatCount, TimeSpan repeatInterval)
例如:

SimpleTriggerImpl(string name, int repeatCount, TimeSpan repeatInterval)
SimpleTriggerImpl(string name, DateTimeOffset startTimeUtc,
DateTimeOffset? endTimeUtc, int repeatCount, TimeSpan repeatInterval)
這個觸發器的含義是,開始時間為立即開始(需要UTCNOW)+結束時間無+重復次數1(注意是重復次數JOB會執行兩次)+輪詢間隔10秒
3.日輪詢執行
利用框架中自帶的DailyTimeIntervalTriggerImpl,就能輕松實現這類型觸發器構造,下面列出常用的幾個構造重載:
- DailyTimeIntervalTriggerImpl(String name, TimeOfDay startTimeOfDayUtc, TimeOfDay endTimeOfDayUtc, IntervalUnit intervalUnit, int repeatInterval)
- DailyTimeIntervalTriggerImpl(string name, DateTimeOffset startTimeUtc,DateTimeOffset? endTimeUtc, TimeOfDay startTimeOfDayUtc, TimeOfDay endTimeOfDayUtc, IntervalUnit intervalUnit, int repeatInterval)
例如:

DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl("DailyTimeIntervalTrigger",DateTimeOffset.UtcNow,null, new TimeOfDay(1, 0, 0), new TimeOfDay(22, 01, 00), IntervalUnit.Minute, 1);
trigger.DaysOfWeek.Add(DayOfWeek.Monday);
這個觸發器的含義是,開始時間為立即開始(需要UTCNOW)+結束時間無+每天凌晨1點開始每天22:01分結束+每分鍾輪詢+重復次數1+僅每周一執行
4.復雜的時間設定
如果想構建有如SqlServerJob設置般靈活的時間設定,那么就需要用到CronTriggerImpl這個類了,使用方法很簡單,直接在構造里放入Cron表達式即可
ITrigger trigger = new CronTriggerImpl("CronTrigger", "TriggerGroup1", "0 0 12 * * ?");
這個觸發器的含義是,每天中午12點執行
注:這部分小弟未曾深入了解,加之這部分API也沒有修改,就不班門弄斧了。請自行搜索Cron表達式/Cron expression