译者注:

目录在这 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. IDEA更换banner(娱乐专用)

    1.佛祖保佑 永无bug _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / ...

  2. 下载STRING数据库检索互作关系结果为空,但是在STRING网站却能检索出互作关系,为什么呢???关键词用的是蛋白ID(ENSP开头)

    首先介绍下两种方法: 一.本地分析 1.在STRING数据库下载人的互作文件,如下图,第一个文件 https://string-db.org/cgi/download.pl?sessionId=HGr ...

  3. Windows下查看dll被哪个进程调用

    卸载程序,结果没卸载干净---程序的安装目录中还剩下一个dll文件.想删,结果系统提示说dll文件被某个进程占用了,不让删. 先前碰到这种做法,我都是直接使用unlocker先unlock一下,然后删 ...

  4. java架构之路-(netty专题)初步认识BIO、NIO、AIO

    本次我们主要来说一下我们的IO阻塞模型,只是不多,但是一定要理解,对于后面理解netty很重要的 IO模型精讲  IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: ...

  5. Spring基础(二)_面向切面(AOP)

    面向切面编程 面向切面编程[AOP,Aspect Oriented Programming]:通过预编译方式和运行期间动态代理实现程序功能的统一维护的技术.AOP 是 Spring 框架中的一个重要内 ...

  6. ubuntu 14.04 安装wordpress

    转者注:若没有Apache + PHP + MySQL环境,请参考我的这篇博客 (1)首先下载wordpress, sudo wget http://wordpress.org/latest.tar. ...

  7. winform应用如何发布(不用打包)、并提醒用户自动更新

    环境:VS2019 community  C#  winform 应用程序 设计应用程序界面 编写对应代码 使用PS设计程序标识ICON F4打开属性: 设置ICON 设置背景 打开项目属性 打开“发 ...

  8. HDU_5045_状态压缩dp

    http://acm.hdu.edu.cn/showproblem.php?pid=5045 i从1到m依次更新,dp[i][j]表示更新到i题时,j表示每个人的答题状态,分别用0和1表示(因为每个人 ...

  9. MySQL学习笔记——基础与进阶篇

    目录 一.###MySQL登录和退出 二.###MySQL常用命令 三.###MySQL语法规范 四.###基础查询 五.###条件查询 六.###排序查询 七.###常见函数的学习 八.###分组查 ...

  10. Springboot全局事务处理

    什么是全局事务 Spring Boot(Spring)事务是通过aop(aop相关术语:通知(Advice).连接点(Joinpoint).切入点(Pointcut).切面(Aspect).目标(Ta ...