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.常见触发器属 ...
随机推荐
- 高性能网络编程之IO和NIO阻塞分析
一.内容 1.阻塞和非阻塞是什么? 2.传统IO模型,他存在哪些阻塞点 3.NIO模型 4.对比总结 1.阻塞和非阻塞是什么? 阻塞:做某件事情,直到完成,除非超时,如果没有完成,继续等待. 非阻塞: ...
- python3中的编码
python2字符串编码存在的问题: 使用 ASCII 码作为默认编码方式,对中文处理不友好 把字符串分为 unicode 和 str 两种类型,将unicode作为唯一内码,误导开发者 python ...
- Firebug 没死,活在 Firefox DevTools 中
伯乐在线转注:2016年12月7日有一条<Firebug 宣布停止开发更新>的资讯,不少朋友误认为以后用不到 Firebug 了.其实在 2015 年 Firebug 已经在着手整合到 F ...
- Oracle DBA最常用的269条命令
1 运行SQLPLUS工具 sqlplus 2 以OS的默认身份连接 / as sysdba 3 显示当前用户名 show user 4 直接进入SQLPLUS命令提示符 sqlplus /nolog ...
- w7安装双系统
http://blog.sina.com.cn/s/blog_86e874d30101e3d8.html http://www.cnblogs.com/hust-ghtao/tag/Linux%E5% ...
- ClientDataSet
TField对象的SetText和GetText事件处理函数 使用TField对象的SetText和GetText事件处理函数可方便的解决字段的代码与代码所对应值的显示问题 TSimpleDatase ...
- [蓝桥杯]ALGO-20.算法训练_求先序排列
问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...
- 用python探索和分析网络数据
Edited by Markdown Refered from: John Ladd, Jessica Otis, Christopher N. Warren, and Scott Weingart, ...
- Pycharm:使用笔记
1.快捷键笔记 CTRL+D:复制当前行 CTRL+/:注释选中行 CTRL+ALT+L:自动format,自动进行标准格式化 ALT + 7:查看当前文件的类和方法概览 Ctrl + Y 删除 ...
- SpringBoot 之热部署
默认情况下, 我们修改 class 或者 修改模板文件(templates目录 下面的文件) 等动态资源, 都不会立即自动生效. 在IDEA中, 我通过Ctrl + F9 , 仍然是无效. 当然, 静 ...