Quartz 第五课 SimpleTriggers 官方文档翻译

对于SimpleTrigger你需要知道它的启动总是在一个特殊的时间点或者有你设置的重复时间段中。直白来说,如果你想在2005年1月13日,正好上午11时23分54秒触发,然后执行五次,每十秒钟。

 

从这个描述中你并没有发现什么特别的内容对于SimpleTrigger:开启时间,结束时间、重复次数、重复时间段。对于这些你期望的内容,仅用两个注意来说明。

 

这个重复的次数可以是0、任意正整数、常数。SimpleTrigger. RepeatIndefinitely(无限重复)。这重复间隔属性值必须是TimeSpan.Zero或者正 TimeSpan值。注意重复间隔为0的时候导致并发触发(可能接近管理器可管理的极限)。

 

如果您还不熟悉DateTime类,你会发现它对于你计算触发时间很有帮助,依赖于你想创建时UTC时间(或结束时间UTC)。

 

EndTimeUtc 属性会限制你的重复次数。对于你不想计算起止时间之间时间片数量,而只执行没十秒一次以及结束时间。

 

TriggerBuilder 来创建SimpleTrigger 实例并能操作主要属性使用WithSimpleSchedule 扩展方法去设置属性值。

 

构建一个trigger 在一个时间点,不重复执行:

1 // trigger builder creates simple trigger by default, actually an ITrigger is returned
2 ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
3     .WithIdentity("trigger1", "group1")
4     .StartAt(myStartTime) // some Date 
5     .ForJob("job1", "group1") // identify job with name, group strings
6 .Build()

构建一个Trigger在一个时间点,每十秒执行一次,重复十次:

1 trigger = TriggerBuilder.Create()
2     .WithIdentity("trigger3", "group1")
3     .StartAt(myTimeToStartFiring) // if a start time is not given (if this line were omitted), "now" is implied
4     .WithSimpleSchedule(x => x
5         .WithIntervalInSeconds(10)
6         .WithRepeatCount(10)) // note that 10 repeats will give a total of 11 firings
7     .ForJob(myJob) // identify job with handle to its JobDetail itself                   
8     .Build();

构建一个Trigger只执行一次,为五分钟以后启动

1 trigger = (ISimpleTrigger) TriggerBuilder.Create()
2     .WithIdentity("trigger5", "group1")
3     .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) // use DateBuilder to create a date in the future
4     .ForJob(myJobKey) // identify job with its JobKey
5 .Build();

构建一个Trigger每五分钟执行一次一直执行22:00

1 trigger = TriggerBuilder.Create()
2     .WithIdentity("trigger7", "group1")
3     .WithSimpleSchedule(x => x
4         .WithIntervalInMinutes(5)
5         .RepeatForever())
6     .EndAt(DateBuilder.DateOf(22, 0, 0))
7 .Build();

构建一个Trigger一小时后启动,每两小时重复一次,一直执行

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

  10 await scheduler.scheduleJob(trigger, job);

所有的Trigger使用TriggerBuilder简洁的语言来书写,并使用了WithSimpleSchedule方法,让你能知道怎样选择构建参数,这些都在例子中给出。

SimpleTrigger Misfire Instructions

SimpleTrigge也有一些指令信息能在在Quartz执行当misfire发生的时候(misfire详细内容请参见相应的章节)。 这些指令定义在MisfirePolicy.SimpleTrigge作为常量(在API文档中有详细的描述)。包括以下:

  • MisfireInstruction.IgnoreMisfirePolicy
  • MisfirePolicy.SimpleTrigger.FireNow
  • MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount
  • MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount
  • MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount
  • MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount

 

你可以从早期的课程中去了解 MisfirePolicy.SmartPolicy 的使用,并且这些指令为所有的Trigger所使用。

 

它是非常简单的使用起来。SimpleTrigger 可以动态的选择在MISFIRE 指令根据配置信息以及状态信息。关于SimpleTrigger.UpdateAfterMisfire()文档中已经解释了其执行的细节。

 

当你正在构建SimpleTriggers时候,你可以指定MisFire指令作为schedule 一部分:

 

1 trigger = TriggerBuilder.Create()
2     .WithIdentity("trigger7", "group1")
3     .WithSimpleSchedule(x => x
4         .WithIntervalInMinutes(5)
5         .RepeatForever()
6         .WithMisfireHandlingInstructionNextWithExistingCount())
7     .Build()

 

posted @ 2016-09-21 20:14  通信的搞程序  阅读(406)  评论(1编辑  收藏  举报