Fork me on GitHub

Quartz.net官方开发指南 第五课: SimpleTrigger

如果需要让任务只在某个时刻执行一次,或者,在某个时刻开始,然后按照某个时间间隔重复执行,简单地说,如果你想让触发器在20078月20日上112354秒执行,然后每个隔10秒钟重复执行一次,并且这样重复5次。那么SimpleTrigger 就可以满足你的要求。

通过这样的描述,你可能很惊奇地发现SimpleTrigger包括这些属性:开始时间,结束时间,重复次数,重复间隔。所有这属性都是你期望它所应具备的,只有end-time属性有一些条目与之关联。

重复次数可能是0,正数或者一个常量值SimpleTrigger.REPEAT_INDEFINITELY。重复间隔时间属性可能是0,正的long型,这个数字以毫秒为单位。注意:如果指定的重复间隔时间是0,那么会导致触发器按照重复数量定义的次数并发触发(或者接近并发)。

Quartz.TriggerUtils类对处理这样的循环也提供了很多支持。

EndTime(如果这个属性被设置)属性会覆盖重复次数属性,这对创建一个每隔10秒就触发一次直到某个时间结束的触发器非常有用,这就可以不计算开始时间和结束时间之间的重复数量。也可以指定一个结束时间,然后使用REPEAT_INDEFINITELY作为重复数量。(甚至可以指定一个大于结束时间之前实际重复次数的整数作为重复次数)。一句话,EndTime属性控制权高于重复次数属性。
   
    SimpleTrigger有几个不同的构造函数,下面我们来看看这结果构造函数:

One of SimpleTrigger's Constructors

public SimpleTrigger(string name, 
                       string group, 
                       DateTime startTime,
                       NullableDateTime endTime endTime, 
                       int repeatCount, 
                       long repeatInterval)

SimpleTrigger Example 1 - Create a trigger that fires exactly once, ten seconds from now

SimpleTrigger trigger = new SimpleTrigger("myTrigger",
                                          
null
,
                                          DateTime.Now.AddSeconds(
10
),
                                          
null
,
                                          
0
,
                                          0L)
;

SimpleTrigger Example 2 - Create a trigger that fires immediately, then repeats every 60 seconds, forever

SimpleTrigger trigger2 = new SimpleTrigger("myTrigger",
                                
null
,
                                DateTime.Now,
                                
null
,
                                SimpleTrigger.REPEAT_INDEFINITELY,
                                
60 1000);

SimpleTrigger Example 3 - Create a trigger that fires immediately, then repeats every 10 seconds until 40 seconds from now

SimpleTrigger trigger = new SimpleTrigger("myTrigger",
                                          "myGroup",
                                          DateTime.Now,
                                          DateTime.Now.AddSeconds(40),
                                          SimpleTrigger.REPEAT_INDEFINITELY,
                                          10 * 1000);

    
SimpleTrigger Misfire Instructions
——SimpleTrigger的未触发指令

未触发发生时,SimpleTrigger有几个指令可以用来通知Quartz进行相关处理。(未触发在上节课中介绍过了)。这些指令以常量形式定义在SimpleTrigger本身,这些指令如下:

Misfire Instruction Constants of SimpleTrigger

MISFIRE_INSTRUCTION_FIRE_NOW

MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT

MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT

MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT

MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT

回顾前面的课程你可以知道,每个触发器都有一个Trigger.MISFIRE_INSTRUCTION_SMART_POLICY指令可用,并且,这个指令对于每个类型的触发器都是缺省的。

posted @ 2007-08-19 21:48  张善友  阅读(15021)  评论(13编辑  收藏  举报