通过上一篇文章,相信大家对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)
例如:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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)
例如:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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