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

一、CronTrigger 对象概述

如果您需要一个基于类似日历的概念而不是基于SimpleTrigger的指定确切间隔来重复的触发执行作业计划,那么CronTrigger通常比SimpleTrigger更有用。
        
        使用CronTrigger,您可以指定诸如“每个星期五中午”或“每个工作日早上9:30”,甚至“每个星期一、星期三和星期五上午9:00至10:00之间的每5分钟”的触发时间表。
        即便如此,像SimpleTrigger一样,CronTrigger也有一个startTime属性,用于指定计划何时生效,以及一个(可选的)endTime属性,用于指定何时停止计划。

 二、Cron表达式

Cron-Expressions用于配置CronTrigger的实例。 Cron-Expressions是实际上由七个子表达式组成的字符串,用于描述计划的各个细节。 这些子表达式用空格分隔,表示:

1.Seconds

        1.Minutes

                1.Hours

                1.Day-of-Month

                1.Month

                1.Day-of-Week

                1.Year (optional field)

完整的cron表达式的一个例子是字符串“0 0 12? * WED“ - 表示”每周三中午12点“。

单个子表达式可以包含范围和/或列表。例如,前一个示例(读作“WED”)中的星期日字段可以用“MON-FRI”、“MON,WED,FRI”甚至“MON-WED,SAT”替换。

通配符(''字符)可用于表示该字段的“每个”可能值。 因此,前一个例子的“月”字段中的''字符仅表示“每个月”。 周日字段中的'*'显然意味着“一周中的每一天”。

所有字段都有一组可以指定的有效值。这些值应该是相当明显的,比如数字0到59表示秒和分钟,数值0到23表示小时。每月的日期可以是0-31的任何值,但您需要注意一个月内的天数!月份可以指定为0到11之间的值,或者使用字符串JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV和DEC。星期几可以指定为1到7之间的值(1 =星期日)或使用字符串SUN,MON,TUE,WED,THU,FRI和SAT。

'/'字符可用于指定值的增量。 例如,如果在“分钟”字段中输入“0/15”,则表示“每隔15分钟,从零分钟开始”。 如果您在“分钟”字段中使用“3/20”,则表示“每小时每20分钟一次,从第3分钟开始” - 或者换句话说,它与在“分钟”中指定“3,23,43”相同。

“?”字符允许用于日期和星期字段。 它用于指定“无特定值”。 当您需要在两个字段之一中指定某些内容而不是另一个字段时,这非常有用。 请参阅下面的示例(和CronTrigger API文档)以获得说明。

“L”字符允许用于日期和星期字段。 这个字符是“last”的简写,但它在两个字段的中具有不同的含义。 例如,日期字段中的“L”值表示“月份的最后一天” -  1月31日,非闰年2月28日。 如果在星期字段中单独使用,则仅表示“7”或“SAT”。如果在星期字段中在另一个值后使用了“L”,则表示“该月的最后一个xxx日” - 例如“6L”或“FRIL”均表示“该月的最后一个星期五”。 使用“L”选项时,重要的是不要指定列表或值范围,因为您得到的结果并不是你想要的。

'W'用于指定最接近给定日期的工作日(周一至周五)。 例如,如果您指定“15W”作为日期字段的值,则含义为:“最接近的工作日到该月的15日”。

‘#’这个词是用来指定这个月的“第n个”XXX工作日。例如,星期几字段中的“6#3”或“FRI#3”的值表示“本月的第三个星期五”。

三、示例 Cron 表达式

以下是表达式及其含义的更多示例 - 您可以在CronTrigger的API文档中找到更多

CronTrigger示例1  - 用于创建触发器的表达式,该触发器每5分钟触发一次

"0 0/5 * * * ?"

CronTrigger示例2  - 用于创建触发器的表达式,该触发器在每分钟10秒后(即上午10:00:10,上午10:05:10等)每5分钟触发一次。

"10 0/5 * * * ?"

CronTrigger示例3  - 用于创建触发器的表达式,该触发器在每周三和周五的10:30,11:30,12:30和13:30触发。

"0 30 10-13 ? * WED,FRI"

CronTrigger示例4  - 用于创建触发器的表达式,该触发器在每个月的5日和20日上午8点到上午10点之间每半小时触发一次。 请注意,触发器不会在上午10:00,即8:00,8:30,9:00和9:30触发

"0 0/30 8-9 5,20 * ?"

请注意,某些计划要求过于复杂,无法通过单个触发器表达 - 例如“上午9:00至上午10:00之间每隔5分钟,下午1:00至晚上10:00之间每20分钟”。 此方案中的解决方案是创建两个触发器,并注册它们以运行相同的作业。

四、建立CronTriggers

CronTrigger实例是使用TriggerBuilder(用于触发器的主要属性)和WithCronSchedule扩展方法(用于特定于CronTrigger的属性)构建的。

您还可以使用CronScheduleBuilder的静态方法来创建计划。

建立一个触发器,每天上午8点到下午5点之间每隔一分钟触发一次:

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger3", "group1")
3                 .WithCronSchedule("0 0/2 8-17 * * ?")
4                 .ForJob("myJob", "group1")
5                 .Build();

构建一个触发器,每天上午10:42触发:

 1             // we use CronScheduleBuilder's static helper methods here
 2             trigger = TriggerBuilder.Create()
 3                 .WithIdentity("trigger3", "group1")
 4                 .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 42))
 5                 .ForJob(myJobKey)
 6                 .Build();
 7
 8             或者
 9
10             trigger = TriggerBuilder.Create()
11                 .WithIdentity("trigger3", "group1")
12                 .WithCronSchedule("0 42 10 * * ?")
13                 .ForJob("myJob", "group1")
14                 .Build();

构建一个触发器,该触发器将在星期三上午10点42分在TimeZone中触发,而不是系统的默认值:

 1             trigger = TriggerBuilder.Create()
 2                 .WithIdentity("trigger3", "group1")
 3                 .WithSchedule(CronScheduleBuilder
 4                     .WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42)
 5                     .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
 6                 .ForJob(myJobKey)
 7                 .Build();
 8
 9             或者
10
11             trigger = TriggerBuilder.Create()
12                 .WithIdentity("trigger3", "group1")
13                 .WithCronSchedule("0 42 10 ? * WED", x => x
14                     .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
15                 .ForJob(myJobKey)
16                 .Build();

五、CronTrigger Misfire 说明

以下说明可用于告知Quartz当CronTrigger发生失效时它应该做什么。 (在本教程的“更多关于触发器”部分中介绍了失效情况)。 这些指令以常量定义(并且API文档具有对其行为的描述)。 说明包括:

MisfireInstruction.IgnoreMisfirePolicy

MisfireInstruction.CronTrigger.DoNothing

MisfireInstruction.CronTrigger.FireOnceNow

所有触发器都可以使用MisfireInstrution.SmartPolicy指令,该指令也是所有触发器类型的默认指令。 CronTrigger将“smart policy”指令解释为MisfireInstruction.CronTrigger.FireOnceNow。 CronTrigger.UpdateAfterMisfire()方法的API文档解释了此行为的确切详细信息。

在构建CronTriggers时,您将失效指令指定为cron调度的一部分(通过WithCronSchedule扩展方法):

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger3", "group1")
3                 .WithCronSchedule("0 0/2 8-17 * * ?", x => x
4                     .WithMisfireHandlingInstructionFireAndProceed())
5                 .ForJob("myJob", "group1")
6                 .Build();

 六、总结

  今天要写的内容差不多了,由于个人的翻译水平有限,可能存在不正确的地方,为了让大家可以看到原文,这样可以有个更好的理解,我也把原地址贴出来。原文地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontriggers.html

不忘初心,继续努力。

转载于:https://www.cnblogs.com/PatrickLiu/p/10101964.html

Quartz.Net进阶之四:CronTrigger 详述相关推荐

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

    Quartz.Net进阶之二:关于触发器的更多信息 原文:Quartz.Net进阶之二:关于触发器的更多信息 与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解 ...

  2. Quartz 第六课 CronTrigger(官方文档翻译)

    CronTriggers使用的频率比SimpleTrigger跟高.如果需要schedule 中触发Job的方式类似于日历的形式而不是一个确定的是时间间隔,那就需要使用CronTrigger. 对于C ...

  3. Quartz.net 定时调度CronTrigger时间配置格式说明

    1.   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...

  4. Nagios深入进阶之四:主从配置的同步

    转载本博客文章请注明,转载自: 小明明's à domicile () 本文地址: http://www.dongwm.com/archives/nagios%e6%b7%b1%e5%85%a5%e8 ...

  5. 架构师进阶之四redis实现分布式锁redission

    1. setNX实现方式 一般的setNX实现方式,在设置key之后,需要设置超时时间,防止死锁.另外设置key和设置超时必须是一个原子操作. 这种方式缺点: 1.1 Fail over 因为是把ke ...

  6. Quartz 2.x 任务调度使用(CronTrigger)

    为什么80%的码农都做不了架构师?>>> Quartz 框架是一个全功能.开源的任务调度服务,可以集成几乎任何的 Java 应用程序-从小的单片机系统到大型的电子商务系统.Quart ...

  7. 深入Quartz,优雅地管理你的定时任务

    深入Quartz,优雅地管理你的定时任务 1 初识Quartz 2 Quartz基础使用 2.1 基于时间间隔的定时任务 2.2 基于Cron表达式的定时任务 3 Quartz解读 3.1 Job 3 ...

  8. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

  9. .NET作业调度 Quartz.NET

    Quartz是一个开源的作业调度框架,OpenSymphony的开源项目.Quartz.Net 是Quartz的C#移植版本. 一.特性: 1:支持集群,作业分组,作业远程管理. 2:自定义精细的时间 ...

最新文章

  1. 百度要造什么车?汽车依然逃不出 BAT 的手掌心 | 撩车
  2. 移动端重构系列1——前期准备工作
  3. 636 起投资事件,吸金 574 亿
  4. C#变量命名的几种方式—C#基础回顾
  5. 树莓派小车(远程控制、PWM变速、超声波自动避障)
  6. linux多线程求和_linux 多线程信号处理总结
  7. Kubernetes-ReplicaSet(RS)(五)
  8. CentOS7下搭建SVN服务器
  9. 2、买卖股票的最佳时机 II
  10. 最全的 Charles 抓包工具详解
  11. 如何编写用户故事的验收标准
  12. 【计量经济学导论】10. ARIMA模型
  13. 如何成为迅雷的高级玩家
  14. keyshot可以打开mtl文件吗_KeyShot:bip文件是什么?bip文件用什么打开?
  15. apkg格式怎么打开_PDF文件怎么压缩?这里有几个小技巧~
  16. Codechef April Challenge 2019 游记
  17. 如何玩转淘宝直通车?提高转化率?
  18. 闲聊调度系统 Apache Airflow
  19. 获取附近小区信息_怎么通过网上找到靠谱的租房信息?
  20. BUG记录: Exception evaluating SpringEL expression

热门文章

  1. SetWindowLong
  2. 互联网协议IP抓包分析 -- wireshark
  3. 进程间通信-system-v
  4. Resource stopwords not found. Please use the NLTK Downloader to obtain the r
  5. app包中的fragment和v4包中的fragment的使用的区别
  6. 在IE下,当eval遇上function
  7. C++的三种访问权限的继承
  8. 电路基础知识 -- 数模信号
  9. android activity dialog 高度,将Activity以Dialog形式显示,并设置宽高度
  10. 【译】How to create your own Question-Answering system easily with python