以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍。所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中。这样,学习起来也不会很累,很容易看完,也能记得住,不用记得那么多不相关的东西,学习效率也会越高。好了,开始今天的学习计划吧,今天我们要介绍的对象就是 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详述的更多相关文章

  1. Quartz.Net进阶之六:详述 JobStores

    一.介绍 今天开始学习 JobStore,别的先不说,也不用翻译软件来翻译,直接从字面意思看来理解一下.我第一眼的感觉就是 job 是任务的意思,Store 是商店的意思,连起来就是可以存储 Job ...

  2. Quartz教程五:SimpleTrigger

    原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...

  3. Spring整合Quartz (cronTrigger和simpleTrigger实现方法)

    Spring整合Quartz (cronTrigger和simpleTrigger实现方法) 之前有记录过一次springboot整合Quartz的文章,由于偶尔一次自己使用spring需要整合Qua ...

  4. Quartz.Net进阶之四:CronTrigger 详述

    以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...

  5. Quartz.Net进阶之一:初识Job作业和触发器

        前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...

  6. Net作业调度(三) — Quartz.Net进阶

    介绍 前面介绍Quartz.Net的基本用法,但在实际应用中,往往有更多的特性需求,比如记录job执行的执行历史,发邮件等. 阅读目录 Quartz.Net插件 TriggerListener,Job ...

  7. Quartz.Net进阶之七:QuartzNet其他的功能简述

    一.介绍 今天是这个系列的最后一篇文章了,主要功能说的差不多了,我们来看看其他相关的内容.话说回来,虽然是这个系列的最后一篇文章,并不代表Quartz的东西就这么点,学习阶段,就这些了,如果以后有了使 ...

  8. Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener

    一.介绍 今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener .JobListener 和 SchedulerL ...

  9. Quartz.Net进阶之二:关于触发器的更多信息

    与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...

随机推荐

  1. Linux内核分析第九次作业

    理解进程调度时机跟踪分析进程调度与进程切换的过程 一.基础知识 Linux系统的一般执行过程 一般情况:正在运行的用户态进程X切换到运行用户态进程Y的过程 1. 正在运行的用户态进程X 2. 发生中断 ...

  2. bvlc_reference_caffenet网络权值可视化

    一.网络结构 models/bvlc_reference_caffenet/deploy.prototxt 二.显示conv1的网络权值 clear; clc; close all; addpath( ...

  3. Substring方法(C#,JS,Java,SQL)的区别

    C#: substring(第一参数,第二参数)//  第一参数:从第几位开始截,初始是从0位开始  第二参数:截取几位 substring(参数)  如果传入参数为一个长整, 且大于等于0,则以这个 ...

  4. TabLayout+ViewPager 标题不显示问题

    第一次用TabLayout+ViewPager 组合在布局中写好了三个标题预览没问题而且也设置了 app:tabIndicatorColor="@color/colorAccent" ...

  5. Group Pathfinding & Movement in RTS Style Games

    转自:http://gamasutra.com/blogs/AndrewErridge/20180522/318413/Group_Pathfinding__Movement_in_RTS_Style ...

  6. spring cloud gateway - RequestRateLimiter

    1. Official website 5.7 RequestRateLimiter GatewayFilter Factory The RequestRateLimiter GatewayFilte ...

  7. NoSql图形数据库

    NoSQL数据库可以按照它们的数据模型分成4类: 键-值存储库(Key-Value-stores); BigTable实现(BigTable-implementations); 文档库(Documen ...

  8. python中class的序列化和反序列化

    对于类的序列化:将类的成员变量名和数据作为一对键值对存储在物理内存中,例如 class A(object): def __init__(self): self.a = o self.b = 1 sel ...

  9. PyQt5系列教程(六)如何让界面和逻辑分离

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.3 前言 前面的内容我们介绍了利用QtDesigner来设计界面,再通过命令行工具p ...

  10. centos6.5部署redmine3.2

    ruby 2.1 + rails 4.2+ mysql 5.6 +centos6.5 + rvm 1.29 1.基本的软件环境 yum -y install libyaml-devel zlib-de ...