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

如果需要让任务只在某个时刻执行一次,或者,在某个时刻开始,然后按照某个时间间隔重复执行,简单地说,如果你想让触发器在2007年8月20日上午11:23:54秒执行,然后每个隔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指令可用,并且,这个指令对于每个类型的触发器都是缺省的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jeremy的技术点滴

Hibernate里使用SQLQuery

31550
来自专栏Java Web

初学Java Web(9)——学生管理系统(简易版)总结

项目开始时间:2018年4月8日14:37:47 项目完成时间:2018年4月9日10:03:30 技术准备 这个项目是自己用于巩固 J2EE 相关知识的练...

66850
来自专栏静默虚空的博客

[Quartz笔记]玩转定时调度

简介 Quartz是什么? Quartz是一个特性丰富的、开源的作业调度框架。它可以集成到任何Java应用。 使用它,你可以非常轻松的实现定时任务的调度执行。 ...

20860
来自专栏海天一树

Neo4j学习(3):操作图数据库的语言--Cypher

match是匹配规则,(n)表示所有节点,语法要求加上小括号。 return n表示返回匹配到的所有节点

15820
来自专栏DOTNET

asp.net web api 下载之断点续传

一、基本思想 利用 HTTP 请求的Range标头值,来向服务端传递请求数据的开始位置和结束位置。服务端获得这两个参数后,将指定范围内的数据传递给客户端。当客户...

482120
来自专栏岑玉海

RavenDb学习(八)高级特性上半部分

1、事务支持 别的关系型数据库和RavenDb一起使用 using (var transaction = new TransactionScope()) { ...

29560
来自专栏潇涧技术专栏

Lint Tool Analysis (2)

本系列的几篇源码分析文档意义不大,如果你正好也在研究lint源码,或者你想知道前面自定义lint规则中提出的那几个问题,抑或你只是想大致了解下lint的源码都有...

18810
来自专栏Pythonista

Django之ORM数据库

            django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqli...

15310
来自专栏MasiMaro 的技术博文

Windows内核函数

在驱动中一般使用的是ANSI字符串和宽字节字符串,在驱动中我们仍然可以使用C中提供的字符串操作函数,但是在DDK中不提倡这样做,由于C函数容易导致缓冲区溢出漏洞...

17740
来自专栏JAVA高级架构

基于zookeeper和quartz实现分布式定时调度

利用zookeeper的特性,来控制quartz实现分布式调度,保证quartz的单点运行,同时解除quartz自身分布式部署对数据库的依赖,保证同一时刻只有一...

22120

扫码关注云+社区

领取腾讯云代金券