回到顶部

Quartz.NET 2.x 文档翻译 - Lesson 5:SimpleTrigger触发模式

时间:2年前   作者:请喊我大龙哥   浏览:335   [站内原创,转载请注明出处]

Quartz.NET 2.x 文档翻译 - Lesson 5:SimpleTrigger触发模式 查看官网英文原文

返回目录

SimpleTrigger触发模式能满足我们的基本调度要求,比如在固定时间点执行一次,然后间隔一定时间再次执行这样的情形。

说了这些后,你可能没有发现SimpleTrigger的属性包括开始时间、结束时间、重复次数和重复间隔。所有这些属性都可以使用的,只是通过开始时间、结束时间这样的关系来实现的。

重复次数可以是0、一个正整数或者是一个SimpleTrigger.RepeatIndefinitely常量。重复间隔属性必须是TimeSpan.Zero或者TimeSpan的正整数。需要我们注意的是,当重复间隔为0会导致Trigger触发器重复计数的同时触发执行。

如果你不熟悉DateTime类,可以依赖startTimeUtc(或者endTimeUtc)去实现trigger触发器的触发时间设置。

EndTimeUtc属性(如果指定了的话)超出了重复次数的限制,这就可以让我们实现这样的需求:比如执行间隔10秒的任务,一直到我们指定的一个截止时间,而不是依赖我们指定的执行次数,这就可以实现了。

SimpleTrigger实例使用TriggerBuilder创建(Trigger触发器的主要属性)和WithSimpleSchedule的扩展方法(SimpleTrigger的特定属性)。

建立一个特定的时刻触发,没有重复:

// trigger builder creates simple trigger by default, actually an ITrigger is returned
ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartAt(myStartTime) // some Date 
    .ForJob("job1", "group1") // identify job with name, group strings
    .Build();
建立一个特定的时刻触发,然后重复每十秒十次: 
trigger = TriggerBuilder.Create()
    .WithIdentity("trigger3", "group1")
    .StartAt(myTimeToStartFiring) // if a start time is not given (if this line were omitted), "now" is implied
    .WithSimpleSchedule(x => x
        .WithIntervalInSeconds(10)
        .WithRepeatCount(10)) // note that 10 repeats will give a total of 11 firings
    .ForJob(myJob) // identify job with handle to its JobDetail itself                   
    .Build();
建立一个触发,执行一次,五分钟后开始执行: 
trigger = (ISimpleTrigger) TriggerBuilder.Create()
    .WithIdentity("trigger5", "group1")
    .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) // use DateBuilder to create a date in the future
    .ForJob(myJobKey) // identify job with its JobKey
    .Build();
建立一个触发,并立刻执行,然后每隔五分钟重复一次,直到时间22:00: 
trigger = TriggerBuilder.Create()
    .WithIdentity("trigger7", "group1")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(5)
        .RepeatForever())
    .EndAt(DateBuilder.DateOf(22, 0, 0))
    .Build();
建立一个触发,下一个小时开始的时候执行,然后每2小时重复一次: 

trigger = TriggerBuilder.Create()
    .WithIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
    .StartAt(DateBuilder.EvenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
    .WithSimpleSchedule(x => x
        .WithIntervalInHours(2)
        .RepeatForever())
    // note that in this example, 'forJob(..)' is not called 
    //  - which is valid if the trigger is passed to the scheduler along with the job  
    .Build();

scheduler.scheduleJob(trigger, job);
多看看TriggerBuilder的方法和其他扩展方法,我们就可以更熟悉的使用了,上面的例子只是一部分展示而已。

SimpleTrigger Misfire Instructions

SimpleTrigger有很多种方式通知quart.net需要做什么在一个misfire发生的时候,这些通知被定义为MisfirePolicy.SimpleTrigger的常量,包括:

SimpleTrigger的misfire通知常量说明:

  1. MisfireInstruction.IgnoreMisfirePolicy
  2. MisfirePolicy.SimpleTrigger.FireNow
  3. MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount
  4. MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount
  5. MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount
  6. MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount
从以前的几篇文章我们可以得知,所有的Trigger触发器都是用的MisfirePolicy.SmartPolicy通知方式,而且这些通知也试所有Trigger类型默认的。

如果我们使用动态的职能通知指令,SimpleTrigger基于配置和状态动态的选择misfire指令,SimpleTrigger.UpdateAfterMisfire()方法解释了这些行为的具体细节。

当我们创建SimpleTriggers的时候,我们通过SimpleSchedulerBuilder制定misfire指令作为一个简单调度的一部分:
trigger = TriggerBuilder.Create()
    .WithIdentity("trigger7", "group1")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(5)
        .RepeatForever()
        .WithMisfireHandlingInstructionNextWithExistingCount())
    .Build();

返回目录

请喊我大龙哥最后编辑于:2年前

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。