quarzt(官方)---给自己看的文档(SimpleTrigger)

第5课:SimpleTrigger

SimpleTrigger应该满足您的调度需求,如果您需要在特定时刻或特定时刻执行完整的作业,然后按特定间隔进行重复。 例如,如果您希望触发器在2015年1月13日正好11:23:54 AM触发,或者如果您希望在那时开火,然后每十秒钟再次触发五次。

有了这个描述,您可能会发现SimpleTrigger的属性包括:开始时间,结束时间,重复计数和重复间隔,可能并不奇怪。 所有这些属性正是您期望的属性,只有与结束时间属性相关的几个特殊说明。

重复计数可以为零,正整数或常量值SimpleTrigger.REPEAT_INDEFINITELY。 重复间隔属性必须为零或正长值,并表示毫秒数。 请注意,重复间隔为零将导致触发器的“重复计数”触发同时发生(或者与调度程序可以管理的同时发生)。

如果您还不熟悉Quartz的DateBuilder类,您可能会发现根据您尝试创建的startTime (或endTime)来计算触发器触发时间有用。

endTime属性(如果指定)将覆盖重复计数属性。 如果您希望创建一个触发器,例如每10秒触发一次直到给定的时间点,而不必计算在开始时间和结束时间之间重复的次数,这可能很有用,你可以简单地指定结束时间,然后使用REPEAT_INDEFINITELY的重复计数(您甚至可以指定一些巨大数字的重复计数,该数量肯定超过触发器在结束时间到达之前实际触发的次数) 。

SimpleTrigger实例使用TriggerBuilder(用于触发器的主要属性)和SimpleScheduleBuilder(对于SimpleTrigger特定的属性)构建。 要以DSL风格使用这些构建器,请使用静态导入:

import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.DateBuilder.*:
 

以下是使用简单计划定义触发器的各种示例,通过它们读取所有触发器,因为它们每个显示至少一个新的/不同的点:

及时构建触发器,不会重复:

  SimpleTrigger trigger = (SimpleTrigger) newTrigger()
    .withIdentity("trigger1", "group1")
    .startAt(myStartTime) // some Date
    .forJob("job1", "group1") // identify job with name, group strings
    .build();
 

在特定时刻建立一个触发器,然后重复每十秒十次:

 trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .startAt(myTimeToStartFiring)  // if a start time is not given (if this line were omitted), "now" is implied
    .withSchedule(simpleSchedule()
        .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 = (SimpleTrigger) newTrigger()
    .withIdentity("trigger5", "group1")
    .startAt(futureDate(5, IntervalUnit.MINUTE)) // use DateBuilder to create a date in the future
    .forJob(myJobKey) // identify job with its JobKey
    .build();
 

建立一个触发器,现在将触发,然后每五分钟重复一次,直到22:00:

 trigger = newTrigger()
    .withIdentity("trigger7", "group1")
    .withSchedule(simpleSchedule()
        .withIntervalInMinutes(5)
        .repeatForever())
    .endAt(dateOf(22, 0, 0))
    .build();
 

建立一个触发器,将在下一个小时的顶部触发,然后每2小时重复一次:

 trigger = newTrigger()
    .withIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
    .startAt(evenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
    .withSchedule(simpleSchedule()
        .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和SimpleScheduleBuilder定义的语言中的所有可用方法,以便您可以熟悉上述示例中未被演示的可用选项。

请注意,TriggerBuilder(和Quartz的其他构建器)通常将为您未明确设置的属性选择合理的值。 例如:如果你不调用* withIdentity(..)*方法,那么TriggerBuilder会为你的触发器生成一个随机的名字; 如果不调用* startAt(..)*,则假定当前时间(立即)。

SimpleTrigger失火说明

SimpleTrigger有几个指令可用于通知Quartz在发生失火时应该做什么。 (“第4课:更多关于触发器”中引入了失火情况)。 这些指令定义为SimpleTrigger本身的常量(包括描述其行为的JavaDoc)。 说明包括:

SimpleTrigger的失火指令常量

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
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指令,并且该指令也是所有触发器类型的默认值。

如果使用“智能策略”指令,SimpleTrigger将根据给定的SimpleTrigger实例的配置和状态动态选择其各种MISFIRE指令。 SimpleTrigger.updateAfterMisfire()方法的JavaDoc解释了这种动态行为的确切细节。

在构建SimpleTriggers时,可以通过SimpleSchedulerBuilder指定misfire指令作为简单计划的一部分:

 trigger = newTrigger()
    .withIdentity("trigger7", "group1")
    .withSchedule(simpleSchedule()
        .withIntervalInMinutes(5)
        .repeatForever()
        .withMisfireHandlingInstructionNextWithExistingCount())
    .build();
 
时间: 2024-10-07 17:10:56

quarzt(官方)---给自己看的文档(SimpleTrigger)的相关文章

发现在看完objc基本语法之后,还是看Apple文档比较有用。

现在已经停止找中文资料了,因为很多例子已经过时,运行不出来. 看完objc基本语法以后,Apple的资料也看得懂了. 还是应该跟着Apple的入门指南开始学,今后也应该以Apple的文档为主. 发现在看完objc基本语法之后,还是看Apple文档比较有用.,布布扣,bubuko.com

Firefly官方教程之DBentrust使用文档

1.dbentrust说明 该模块主要是对数据库与memcached存储的处理.里面封装了从memcached数据到python对象的映射.可以以操纵python对象的方式进行memcached中存储的数据的操作,只要在不同的进程中实例化相同名称的memobject对象,就能保证对象中的数据是一致的.还包含了将这个对象中的数据同步到数据库的处理方法. 2.结构解析 <ignore_js_op> MemObject类规定了数据的格式,所有的数据都存储在memcached中,为了区分不同的数据,每

Firefly官方教程之Distributed使用文档

distributed使用文档1.distributed说明该模块主要封装了各个服务进程间进行通信的方法.node子节点域root根节点进程中的接口调用返回的都是延迟对象.关于延迟对象的使用,详见twisted中Deferred对象.2.结构解析 <ignore_js_op> PBRoot,root节点对象ChildsManager,子节点管理基类Child对象对应的是连接到本服务进程的某个服务进程对象.称为子节点对象RemoteObject远程调用对象,子节点服务进程中实现.可以通过这对象去

Firefly官方教程之Netconnect使用文档

1.distributed说明该模块包含了服务端与客户端通信的一些处理方法,包括发送数据的封装,协议头的封装,tcp通信时进行分包,处理粘包问题.2.结构解析 LiberateFactory,协议工厂,所有连接的本质,服务端与客户端通信的这一行为的形象化,它包含三个部分:1)LiberateProtocol,通信协议类,连接建立.断开后的操作,发送数据等都由它来控制2)DataPackProtoc,数据包协议的定义,所有的数据解析都要遵守它定制的规则3)ConnectionManager,连接管

谈谈WebService开发-应用篇(三)-教你如何看WSDL文档

作为webservice客户端开发,在日常工作中可能经常会拿到一个对方提供的wsdl地址或文档,那么拿到这个地址后我们如何编写客户端调用代码呢,前面几篇只是以个人经验的方式写了下,那么真正要根据wsdl文档来编写客户端调用代码就必须学会看懂wsd文档.下面就结合之前的demo来深入剖析下wsdl文档,最后以图解的方式形象说明下. 本文以之前的SayHello的Demo来深入分析下wsdl文档的几个部分,个人认为可以共分6部分,下面分别介绍: <definitions/> 这部分在基础篇里已经介

如何快速掌握官方提供的java API文档使用技巧

API的特点就是查阅方便,无需购买任何书籍,通过在线API文档官方网站,就可以随时随地查看JDK文档(即API文档),为编程提供极大的便利,节省了大量的时间.在线API文档的具体使用方法如下: 1.打开浏览器(任何一个浏览器都可以) 2.在搜索框输入java api,单击“百度一下”进行搜索 3.搜索完成后,鼠标下滑就能看到“在线API文档”字样了,单击超链接即可进入网站 4.进入网站后,直接单击“常用API文档索引”下面的java咖啡图标,进入文档 5.下面这个页面就是java api文档主页

quarzt(官方)---给自己看的文档(TriggerListeners和JobListeners)

侦听器是您根据调度程序中发生的事件创建的对象. 您可能会猜到, TriggerListeners会接收与触发器相关的事件, JobListeners会接收与作业相关的事件. 触发器相关的事件包括:触发器触发,触发失灵(在本文档的"触发器"部分中讨论),并触发完成(触发器关闭的作业完成). org.quartz.TriggerListener接口 public interface TriggerListener { public String getName(); public void

quarzt(官方)---给自己看的文档(CronTrigger)

第6课:CronTrigger CronTrigger通常比SimpleTrigger更有用,如果您需要一个基于日历的概念重复的作业启动计划,而不是SimpleTrigger的精确指定的间隔. 使用CronTrigger,您可以指定点火时间表,例如"每个星期五中午",或"每个工作日和上午9:30",甚至"每周一,周三上午9点到10点之间每隔5分钟和1月份的星期五". 即使如此,像CronTrigger一样,CronTrigger有一个startT

【转】看C++文档的小知识

转载:http://www.ggv.com.cn/forum/clib/ctype/isspace.html 函数isspace 原型:extern int isspace(int c);    用法:#include <ctype.h>    功能:判断字符c是否为空白符    说明:当c为空白符时,返回非零值,否则返回零.  空白符指空格.水平制表.垂直制表.换页.回车和换行符.    举例: // isspace.c #include <syslib.h> #include