对于SimpleTrigger你须要知道它的启动老是在一个特殊的时间点或者有你设置的重复时间段中。直白来讲,若是你想在2005年1月13日,正好上午11时23分54秒触发,而后执行五次,每十秒钟。并发
从这个描述中你并无发现什么特别的内容对于SimpleTrigger:开启时间,结束时间、重复次数、重复时间段。对于这些你指望的内容,仅用两个注意来讲明。ide
这个重复的次数能够是0、任意正整数、常数。SimpleTrigger. RepeatIndefinitely(无限重复)。这重复间隔属性值必须是TimeSpan.Zero或者正 TimeSpan值。注意重复间隔为0的时候致使并发触发(可能接近管理器可管理的极限)。ui
若是您还不熟悉DateTime类,你会发现它对于你计算触发时间颇有帮助,依赖于你想建立时UTC时间(或结束时间UTC)。this
EndTimeUtc 属性会限制你的重复次数。对于你不想计算起止时间之间时间片数量,而只执行没十秒一次以及结束时间。spa
TriggerBuilder 来建立SimpleTrigger 实例并能操做主要属性使用WithSimpleSchedule 扩展方法去设置属性值。code
构建一个trigger 在一个时间点,不重复执行:blog
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在一个时间点,每十秒执行一次,重复十次:ci
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:00get
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方法,让你能知道怎样选择构建参数,这些都在例子中给出。
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()