Quartz.NET - 教程 5: 简单触发器
译者注:
目录在这 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: 简单触发器的更多相关文章
- Quartz.NET学习笔记(三) 简单触发器
触发器是Quartz.NET的另外第一个核心元素,他有2种类型,简单触发器(Simple Trigger)和计划任务触发器(Cron Trigger), 一个触发器可以绑定一个任务. 通用触发器属性 ...
- (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例
http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介
第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...
- Quartz.Net - Lesson2: 任务和触发器
Lesson 2: 任务和触发器 本系列文章是官方3.x文档的翻译,原文地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tut ...
- 《zw版·Halcon-delphi系列原创教程》简单的令人发指,只有10行代码的车牌识别脚本
<zw版·Halcon-delphi系列原创教程>简单的令人发指,只有10行代码的车牌识别脚本 简单的令人发指,只有10行代码的车牌识别脚本 人脸识别.车牌识别是opencv当中 ...
- Playmaker全面实践教程之简单的使用Playmaker示例
Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...
- Quartz 框架 教程(中文版)2.2.x
Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架 Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介 Quar ...
- Oracle数据库零散知识06 -- Package的定义与简单触发器
CREATE OR REPLACE PACKAGE pak_02 IS--包头 --这里可定义公共参数 FUNCTION fun_01 RETURN NUMBER; PROCEDURE pro_01 ...
- ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基础教程总结 ASP.NET Core 基础教程总算是有了个简单 ...
随机推荐
- Shell常用脚本之用户操作
批量创建10个系统帐号oldboy01-oldboy10并设置密码,密码为随机8位字符串 #!/bin/bash ..} do useradd $user -] | ` | passwd --stdi ...
- Spring注解开发系列Ⅵ --- AOP&事务
注解开发 --- AOP AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,横向重复,纵向抽取.详细的AO ...
- Maven 项目无法在Ecplise加进tomcat server
当把用Maven项目 加进 tomcat server 时,出现 "There are no resources that can be added or removed from the ...
- 如何利用开源解码项目开发js视频解码的web应用 系列
介绍web上开发视频业务相关程序的技术演变历程 https://www.cnblogs.com/maoliangwu/articles/12046495.html 介绍ffmpeg asm.js we ...
- 关于puremvc的几点思考
软件框架 框架要解决的问题是什么?这个问题感觉不能一概而论,就目前我遇到的项目实际来说主要是要解决以下几个问题 复用 并行开发 跨平台 项目背景:视频监控领域下,C/S & B/S模式的PC客 ...
- Linux 工作机初始化操作
# apt 依赖包安装 sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libs ...
- Linux下安装 php imagick扩展
今天小编 由于工作需求用到了 imagick 这个扩展 服务器环境是 lnmp 架构下面稍微来介绍下 这个 东东 imagick是一个PHP的扩展,用ImageMagick提供的API来进行图片的创 ...
- docker 修改 bridge网桥网段
首先停止正在使用的 Docker 服务: $ sudo service docker stop 接着删除 Docker 默认网桥 docker0 : $ sudo ip link set dev do ...
- 外网访问oracle 很慢
一台oracle服务器 对外网开放服务,外网连接后查询速度很慢,内网查询非常快.应该是这个cisco的防火墙有问题,查了很久 没有找到原因. 临时解决方法,在内网再建一台 跳转服务器,外网查询数据库 ...
- [RHEL8]安装Docker Problem: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io
系统环境 # cat /etc/redhat-release Red Hat Enterprise Linux release 8.0 (Ootpa) 安装依赖 # yum install -y yu ...