译者注:

目录在这 Quartz.NET 3.x 教程

原文在这 Lesson 5: SimpleTrigger

如果你需要在特定的时间点执行一次作业, 或者在特定的时间点执行一次作业, 然后在特定的时间间隔重复执行一次作业, 那么简单触发器应该能够满足你的调度需求. 或者说, 如果你想让触发器2005年1月13日上午11:23:54触发, 然后每10秒再出发5次.

如上所述, 你可能会发现简单触发器的属性包括: 开始时间, 结束时间, 重复次数和重复间隔. 所有这些属性都是你所期望的, 还有几个与结束时间属性相关的特殊注释.

重复次数可以是零, 正整数, 或常量值 SimpleTrigger.Repeatedeniminate. 重复间隔属性必须是 TimeSpan.Zero, 或正 TimeSpan 值. 注意重复间隔为零将导致触发器的 '重复次数' 触发同时发生 (或尽可能接近调度程序可以管理的并发).

如果你已经熟悉 DateTime 相关的类, 你可能会发现她有助于计算触发器触发时间, 具体取决于你试图创建的 startTimeUtc (或 endTimeUtc).

EndTimeUtc 属性 (如果已指定) 会覆盖重复次数属性. 如果你想创建一个触发器, 比如每10秒触发一次, 直到某个指定的时间点, 而不必计算其在开始时间和结束时间之间重复的次数, 那么这个方法很有用, 你可以简单地指定结束时间, 然后无限期地使用 RepeatIndefinitely 的重启次数 (你甚至可以指定某个巨大数字的重复次数, 肯定会比触发器在结束时间到达之前实际触发的次数大的多).

SimpleTrigger 实例是使用 TriggerBuilder (用于触发器的主属性) 和 WithSimpleSchedule 扩展方法 (用于 SimpleTrigger 的特定属性) 构建的.

构建一个在某时刻立即触发的触发器, 并且不重复执行:

// 触发器构建器默认创建简单触发器, 实际上会返回一个 ITrigger
ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(myStartTime) // some Date
.ForJob("job1", "group1") // 用名称和组名标识作业
.Build();

构建一个在某时刻立即触发的触发器, 然后每10秒执行10次:

trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.StartAt(myTimeToStartFiring) // 如果没有给出开始时间 (如果省略了这一行), 则隐含为 "现在"
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.WithRepeatCount(10)) // 注意这里设置重复次数10次, 但一共会执行11次
.ForJob(myJob) // 用 JobDetail 本身的句柄标识 job
.Build();

构建一个在5分钟之后触发一次的触发器:

trigger = (ISimpleTrigger) TriggerBuilder.Create()
.WithIdentity("trigger5", "group1")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) // 用 DateBuilder 创建一个将来的日期
.ForJob(myJobKey) // 用 JobKey 标识作业
.Build();

构建一个马上触发的触发器, 然后每5分钟重复触发一次, 直到 22:00:

trigger = TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(5)
.RepeatForever())
.EndAt(DateBuilder.DateOf(22, 0, 0))
.Build();

构建一个在下个小时整点触发的触发器, 然后每2个小时重复触发一次, 直到海枯石烂:

trigger = TriggerBuilder.Create()
.WithIdentity("trigger8") // 由于未指定组, "trigger8" 将会在默认组里
.StartAt(DateBuilder.EvenHourDate(null)) // 得到下一个偶数小时 (分秒为0 ("00:00"))
.WithSimpleSchedule(x => x
.WithIntervalInHours(2)
.RepeatForever())
// 注意在此示例中, 没有调用 'forJob(..)' 方法如果需要把触发器与作业一起传递给计划程序, 则该选项有效
.Build(); await scheduler.scheduleJob(trigger, job);

花点时间好好看看由 TriggerBuilder 以及扩展方法 WithSimpleSchedule 定义的所有可用方法, 以便熟悉上面示例中可能没有演示的可用选项.

简单触发器哑火说明

简单触发器有几个指令可用于通知 Quartz.NET 在发生哑火时应执行的操作. (本教程的 "更多关于触发器" 部分介绍了哑火说明). 这些指令被定义在常量 MisfirePolicy.SimpleTrigger 里 (包括描述其行为的API文档). 说明包括:

简单触发器的哑火说明常量

  • MisfireInstruction.IgnoreMisfirePolicy
  • MisfirePolicy.SimpleTrigger.FireNow
  • MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount
  • MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount
  • MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount
  • MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount

你应该回顾一下前面的课程所有触发器都可以使用 MisfirePolicy.SmartPolicy 指令, 并且此指令也是所有触发器类型的默认指令.

如果使用 '智能策略' 指令, 则 SimpleTrigger 会根据给定的 SimpleTrigger 实例的配置和状态, 在其各种哑火指令之间动态选择. SimpleTrigger.UpdateAfterMisfire () 方法的文档解释了这种动态行为的细节.

构建 SimpleTriggers 时, 可以将哑火指令作为简单调度的一部分 (通过 SimpleSchedulerBuilder):

trigger = TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(5)
.RepeatForever()
.WithMisfireHandlingInstructionNextWithExistingCount())
.Build();

Quartz.NET - 教程 5: 简单触发器的更多相关文章

  1. Quartz.NET学习笔记(三) 简单触发器

    触发器是Quartz.NET的另外第一个核心元素,他有2种类型,简单触发器(Simple Trigger)和计划任务触发器(Cron  Trigger), 一个触发器可以绑定一个任务. 通用触发器属性 ...

  2. (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例

    http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...

  3. [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介

    第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...

  4. Quartz.Net - Lesson2: 任务和触发器

    Lesson 2: 任务和触发器 本系列文章是官方3.x文档的翻译,原文地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tut ...

  5. 《zw版·Halcon-delphi系列原创教程》简单的令人发指,只有10行代码的车牌识别脚本

    <zw版·Halcon-delphi系列原创教程>简单的令人发指,只有10行代码的车牌识别脚本 简单的令人发指,只有10行代码的车牌识别脚本      人脸识别.车牌识别是opencv当中 ...

  6. Playmaker全面实践教程之简单的使用Playmaker示例

    Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...

  7. Quartz 框架 教程(中文版)2.2.x

    Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架 Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介 Quar ...

  8. Oracle数据库零散知识06 -- Package的定义与简单触发器

    CREATE OR REPLACE PACKAGE pak_02 IS--包头 --这里可定义公共参数 FUNCTION fun_01 RETURN NUMBER; PROCEDURE pro_01 ...

  9. ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基础教程总结 ASP.NET Core 基础教程总算是有了个简单 ...

随机推荐

  1. java web 各个文件夹命名原因

    今天突然被同学问然后就发现,自己有很多的疑问: (1) 为什么servlet的配置文件,命名为 web.xml , 内部是如何读取的,原因就是他内度的工作原理 (2) webINF Src 文件为什么 ...

  2. 微信小程序没有找到可以构建的npm包

    如果是云开发小程序 ,cmd窗口进入到小程序根目录下的miniprogram目录, 输入npm init 输入包的相关属性,随便输入即可. 完成后会出现一个package.json文件. 如果是其他类 ...

  3. react中 如何使用图片

    //render 第一种方法:先const一个对象,把需要应用图片的dom上的style写入对象中, 然后在return()中使用style关键字赋值为预先定义的那个style对象 const bgG ...

  4. 图像GIST特征和LMGIST包的python实现(有github)

    1什么是Gist特征        (1) 一种宏观意义的场景特征描述        (2) 只识别"大街上有一些行人"这个场景,无需知道图像中在那些位置有多少人,或者有其他什么对 ...

  5. 如何使用jmeter做一个功能的性能测试

    一.为什么又再次写类似的文章? 在博客园和公号写文章,已经快两年了,所以自然在公号和博客园都能联系到我的. 也就是几天前,有个人加我微信,对于总有人加我好友,我已经觉得不奇怪了,为什么呢? 加我好友的 ...

  6. centos6.8安装lnmp

    一.配置CentOS 第三方yum源(CentOS默认的标准源里没有nginx软件包) [root@localhost ~]# yum install wget #安装下载工具wget[root@lo ...

  7. JSP&Servlet学习笔记----第6章

    JSP与Servlet是一体两面的关系. JSP最终还是被编译为Servlet. <%@page contentType="text/html;charset=UTF-8" ...

  8. 搭建一个V 2ray的方法

    VPS构建VPN教程 (由于博客限制有些敏感词 V 2ray中间会打空格或者(删掉我)图片中的敏感词进行了马赛克处理) 关于自建VPN翻墙教程,此处是利用V 2 ray的一个VPS搭建VPN教程.便于 ...

  9. Open Images V4 下载自己需要的类别

    OpenImages V4数据集描述1)这个v4数据集主要有两种用途:对象检测及分类,意思是说可以用这个数据集训练出对象检测模型,用于识别图像中的对象类别及位置边框.视觉关系检测,比如你用这个v4数据 ...

  10. ELK:收集k8s容器日志最佳实践

    简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗: 就docker微服务化而言,研发有需求标准输出,也有需求文件输出, ...