魔幻☆天空

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

通过上一篇文章,相信大家对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)

   例如:

View Code
    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)

    例如:

View Code
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

 

posted on 2012-02-08 15:45  魔幻天空  阅读(3695)  评论(6编辑  收藏  举报