Quartz.Net进阶之三:SimpleTrigger详述
以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍。所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中。这样,学习起来也不会很累,很容易看完,也能记得住,不用记得那么多不相关的东西,学习效率也会越高。好了,开始今天的学习计划吧,今天我们要介绍的对象就是 SimpleTrigger。
一、SimpleTrigger 对象概述
如果您想要在特定时刻只执行一次作业,或者在特定时刻按特定时间间隔重复执行作业,则SimpleTrigger对象完全可以满足您的日程安排需求。或者用更简单的说,如果你想让触发器在2005年1月13日上午11:23:54开始激活,然后每隔10秒执行作业5次,这样的需求,就是 SimpleTrigger 最好的使用场景。
通过此描述,您可能对 SimpleTrigger 对象包含的以下这些属性并不会感到很惊讶,其属性包括:开始时间和结束时间、重复计数和重复间隔。所有这些属性都是您所期望的,只有几个与结束时间属性相关的需要特殊标注一下。
重复的次数可以是零,正整数或常量值SimpleTrigger.RepeatIndefinitely。 重复间隔属性必须是TimeSpan.Zero或正的TimeSpan值。 请注意,重复间隔为零将导致触发器的“重复计数”触发同时发生(或者与调度程序可以管理的同时接近)。
如果您还不熟悉DateTime类,那么根据要创建的startTimeUtc(或endTimeUtc),您可能会发现它对计算触发器触发时间很有帮助。
EndTimeUtc属性(如果已指定)覆盖重复次数属性。 如果您希望创建一个触发器,例如每隔10秒触发一次,直到给定的时刻 - 而不是必须计算它在开始时间和结束时间之间重复的次数,这可能很有用, 可以简单地指定结束时间,然后使用RepeatIndefinitely的重复计数(你甚至可以将重复次数设置为一个巨大数字,而且这个数字肯定会超过触发器在结束时间到来之前实际触发的次数)。
SimpleTrigger实例使用TriggerBuilder(针对触发器的主要属性)和WithSimpleSchedule扩展方法(针对SimpleTrigger特定属性)来构建。
1、在特定时刻构建触发器,不重复:
// TriggerBuilder默认创建简单触发器,实际上返回ITrigger
ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(myStartTime) // some Date
.ForJob("job1", "group1") //使用名称,组字符串识别作业
.Build();
2、在特定时刻构建触发器,然后每十秒重复十次:
trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.StartAt(myTimeToStartFiring) // 如果没有给出开始时间(如果省略该行),则表示“现在”
.WithSimpleSchedule(x => x
.WithIntervalInSeconds()
.WithRepeatCount()) // 请注意,10次重复将总共触发11次
.ForJob(myJob) //使用JobDetail本身的句柄识别作业
.Build();
3、构建一个触发器,将在未来五分钟内触发:
trigger = (ISimpleTrigger) TriggerBuilder.Create()
.WithIdentity("trigger5", "group1")
.StartAt(DateBuilder.FutureDate(, IntervalUnit.Minute)) // 使用DateBuilder在将来创建日期
.ForJob(myJobKey) // 用JobKey标识工作
.Build();
4、构建一个现在将触发的触发器,然后每五分钟重复一次,直到22:00:
trigger = TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInMinutes()
.RepeatForever())
.EndAt(DateBuilder.DateOf(, , ))
.Build();
5、构建一个触发器,在下一个小时的顶部触发,然后每2小时重复一次,永远:
trigger = TriggerBuilder.Create()
.WithIdentity("trigger8") //因为没有指定组,所以“trigger8”将位于默认组中。
.StartAt(DateBuilder.EvenHourDate(null)) // 得到下一个偶数小时(分钟和秒零(“00:00”))
.WithSimpleSchedule(x => x
.WithIntervalInHours()
.RepeatForever())
// 请注意,在此示例中,如果将触发器与作业一起传递给调度程序,则不会调用“forJob(..)”
.Build(); await scheduler.scheduleJob(trigger, job);
花一些时间查看TriggerBuilder定义的语言及其扩展方法WithSimpleSchedule中的所有可用方法,以便您熟悉可用的选项,这些选项可能未在上面的示例中演示过。
二、SimpleTrigger 的 Misfire(激活失败) 介绍
SimpleTrigger有些指令可用于告知Quartz.NET发生激活失败时它应该做什么。(在本教程的“更多关于触发器”部分中介绍了激活失败(Misfire)的情况)。 这些指令在MisfirePolicy.SimpleTrigger上定义为常量(包括描述其行为的API文档)。 说明包括:
1、SimpleTrigger的Misfire(激活失败)指令常量
1)、MisfireInstruction.IgnoreMisfirePolicy
2)、MisfirePolicy.SimpleTrigger.FireNow
3)、MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount
4)、MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount
5)、MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount
6)、MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount
您应该从早期的课程中回忆一下,所有触发器都可以使用 MisfirePolicy.SmartPolicy 指令,并且此指令也是所有触发器类型的默认指令。
如果使用“智能策略”指令,SimpleTrigger 将根据给定SimpleTrigger实例的配置信息和状态在其各种 MISFIRE 指令之间动态选择。 SimpleTrigger.UpdateAfterMisfire()方法的文档的解释了此动态行为的具体的细节内容。
构建 SimpleTriggers 实例时,将 misfire 指令指定为 SimpleSchedule 的一部分(通过SimpleSchedulerBuilder):
trigger = TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInMinutes()
.RepeatForever()
.WithMisfireHandlingInstructionNextWithExistingCount())
.Build();
三、总结
今天要写的内容完成了,但是并不代表 SimpleTrigger 的各个方面都介绍完了。其实还有很多内容没有说到,这就要靠大家自己的努力。有些人坑你还是很喜欢看原文,那我也把地址贴出来的。原文地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/simpletriggers.html
不忘初心,继续努力。
Quartz.Net进阶之三:SimpleTrigger详述的更多相关文章
- Quartz.Net进阶之六:详述 JobStores
一.介绍 今天开始学习 JobStore,别的先不说,也不用翻译软件来翻译,直接从字面意思看来理解一下.我第一眼的感觉就是 job 是任务的意思,Store 是商店的意思,连起来就是可以存储 Job ...
- Quartz教程五:SimpleTrigger
原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...
- Spring整合Quartz (cronTrigger和simpleTrigger实现方法)
Spring整合Quartz (cronTrigger和simpleTrigger实现方法) 之前有记录过一次springboot整合Quartz的文章,由于偶尔一次自己使用spring需要整合Qua ...
- Quartz.Net进阶之四:CronTrigger 详述
以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...
- Quartz.Net进阶之一:初识Job作业和触发器
前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...
- Net作业调度(三) — Quartz.Net进阶
介绍 前面介绍Quartz.Net的基本用法,但在实际应用中,往往有更多的特性需求,比如记录job执行的执行历史,发邮件等. 阅读目录 Quartz.Net插件 TriggerListener,Job ...
- Quartz.Net进阶之七:QuartzNet其他的功能简述
一.介绍 今天是这个系列的最后一篇文章了,主要功能说的差不多了,我们来看看其他相关的内容.话说回来,虽然是这个系列的最后一篇文章,并不代表Quartz的东西就这么点,学习阶段,就这些了,如果以后有了使 ...
- Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener
一.介绍 今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener .JobListener 和 SchedulerL ...
- Quartz.Net进阶之二:关于触发器的更多信息
与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...
随机推荐
- easyui-datebox 点击事件
<div class="form-group col-xs-5 col-md-5 col-lg-6" style = "margin-left: 0px;" ...
- BCC校验小知识
BCC校验其实是奇偶校验的一种,但也是经常使用并且效率较高的一种.所谓BCC校验法,就是在发送前和发送后分别把BCC以前包括ETX字符的所有字符按位异或后,按要求变换(增加或去除一个固定的值)后所得到 ...
- Lattice并购案&我国FPGA发展路径
FPGA作为通信.航天.军工等领域的关键核心器件,是保障国家战略安全的重要支撑基础.近年来,随着数字化.网络化和智能化的发展,FPGA的应用领域得到快速扩张.美国在FPGA领域拥有绝对的垄断优势,已成 ...
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机
1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...
- Scrapy实战篇(五)之爬取历史天气数据
本篇文章我们以抓取历史天气数据为例,简单说明数据抓取的两种方式: 1.一般简单或者较小量的数据需求,我们以requests(selenum)+beautiful的方式抓取数据 2.当我们需要的数据量较 ...
- linux怎么样显示命令历史后又显示命令的输入时间
linux的bash内部命令history就可以显示命令行的命令历史,默认环境执行 history命令后,通常只会显示已执行命令的序号和命令本身.如果想要查看命令历史的时间戳,那么可以执行: 临时显示 ...
- docker 批量删除
杀死所有正在运行的容器docker kill $(docker ps -a -q) 删除所有已经停止的容器docker rm $(docker ps -a -q) 删除所有未打 dangling 标签 ...
- oracle体系结构理解
体系结构相关内容每次看遍书,过段时间就忘了..无奈用自己理解的方式记录之. 1.commit与写盘与否没有关系,也就是说修改数据(insert update delete)后并提交数据,这条被修改的数 ...
- (转发)storm 入门原理介绍
1.hadoop有master与slave,Storm与之对应的节点是什么? 2.Storm控制节点上面运行一个后台程序被称之为什么?3.Supervisor的作用是什么?4.Topology与Wor ...
- dubbo 支持的7种协议
建议看原文 转自:https://blog.csdn.net/xiaojin21cen/article/details/79834222 1.dubbo 协议 (默认) 2.rmi 协议 3.hes ...