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

对于CronTrigger,你可以触发Schedule,例如每个周五中午或者每个工作日的下午9:30或者在早上9:00至10:;之间每五分钟执行一次在每个周一、周二、周五执行。

不紧如此,SampleTrigger和CronTriggerd都有一个启动时间和一个可选的结束时间来停止。

Cron Expressions

Cron-Expressions被用于配置CronTrigger实例。Cron-Expressions是一串字符串。由七个部分组成,用来详细描述时间调度。各个部分内容用空格分开,各部分表示如下:

  1. Seconds
  2. Minutes
  3. Hours
  4. Day-of-Month
  5. Month
  6. Day-of-Week
  7. Year (optional field

用一个简单的例子说明:“0 0 12 ? * WED”。这段字符串表达的意思是每个星期二的12:00.

个别的sub-expressions可以包含一个范围组合。例如:day of week 字段,在之前的例子中可以写成“MON-FRI”,“MON,WED,FRI”或者是“MON,WED,SAT”。

各部分使用通配符来表示这个字段所有的可能值意思显而易见在Month字段上表示所有月份,在day of week表示每个周的所有天数。

每个字段都有自己的值限定。这些限定值得范围是相当明显-在分钟和秒的字段上范围是0-59。在Hours字段上范围为0-23。在day of month 字段上范围是0-31但是这需要依据具体的月份来计算。Month的有效值为0-11.。当然也可以使用JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC。day of week 有效范围是1-7(表示星期日)也可以使用SUN, MON, TUE, WED, THU, FRI and SAT.表示。

‘/’用来表示一个特殊的增长间隔。例如在Minutes字段上写入0/15,表示的意思是每15执行,在0分钟的时候启动。如果写的3/20则表示每20分钟执行一次,在3分钟钟后启动,其工作的时间是3,23,43.

‘?’可以用在 day-of-month and day-of-week字段上面。用来表示没有具体值得意思。如果你需要在这两个字段做一些特殊的操作这个符号是非常有用的,详情请看CronTrigger API documentation。

‘L’容许用在day-of-month and day-of-week 字段上面。这个字符在两个字段上面表示的意思不太一样。例如:在day-of-month上表示是这个月的最后的一天。如果使用在day-of-week表示的7(SAT)。如果在L前面带有其它具体值,则表示某个月的最后的某一天。例如6L或者FRIL表示的是该月的最后一个星期5.当你使用L的时候,你需要知道它不会指定一个特殊的具体指或者一个范围,而是一个不确定的值。

‘W’表示的是最接近给定天的工作日(星期一到星期五)。例如你写是15W在day-of-month则表示最接近该月15的工作日。

“#”被用来指定该月的“第n”XXX工作日。例如,设置值“6#3”或者“FRI#3”在day-of-week,则表示这个月的第三个星期五”。

Example Cron Expressions

下面给出一些具体表达式例子,更具体的介绍见the API documentation for CronTrigger。

1、每五分钟执行一次

"0 0/5 * * * ?"

2、每五分钟执行一次,十秒等待

"10 0/5 * * * ?"   10:00:10  10:05:10

3、每周一和周五的10:30 11:30 12:30 13:30执行一次

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

4、每月的5号与20号的8-9点之间每30分钟执行一次

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

注意:有些触发机制过于复杂,例如每五分钟执行一次在每月的8-9点,并且在13至22点没20分钟执行一次,对于这样的触发记住,可以装件两个单独的触发器来工作相同的内容。

Building CronTriggers

构建CronTrigger具体实例,使用的是TriggerBuilder (用来配置Trigger主要的内容)和WithCronSchedule(用来配置Trigger的特殊需要内容) 扩展方法。

1、创建一个每天的8-17点之间每两分钟执行一次

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

2、构建一个每天10:42执行一次

 // we use CronScheduleBuilder's static helper methods here
trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(, ))
.ForJob(myJobKey)
.Build();

或者

 trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.WithCronSchedule("0 42 10 * * ?")
.ForJob("myJob", "group1")
.Build();

3、构建一个每个星期二的10:42,使用非系统默认的时区

 trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.WithSchedule(CronScheduleBuilder
.WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, , )
.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
.ForJob(myJobKey)
.Build();

或者

 trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.WithCronSchedule("0 42 10 ? * WED", x => x
.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
.ForJob(myJobKey)
.Build();

CronTrigger Misfire Instructions

下面的是CronTrigger MisFire(失败之后执行的策略)。详情见 API documentation

  • MisfireInstruction.IgnoreMisfirePolicy
  • MisfireInstruction.CronTrigger.DoNothing
  • MisfireInstruction.CronTrigger.FireOnceNow

所有触发器有可使用的MisfireInstrution.SmartPolicy指令,并且该指令也是所有触发类型的默认。在“明智的政策”指令被CronTrigger解释为MisfireInstruction.CronTrigger.FireOnceNow。对于CronTrigger.UpdateAfterMisfire()方法的API文档解释了这种行为的具体细节。

当建立CronTriggers,您指定的misfire 作为cron的计划的一部分(通过WithCronSchedule扩展方法):

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

Quartz 第六课 CronTrigger(官方文档翻译)的更多相关文章

  1. Quartz 第五课 SimpleTriggers 官方文档翻译

    对于SimpleTrigger你需要知道它的启动总是在一个特殊的时间点或者有你设置的重复时间段中.直白来说,如果你想在2005年1月13日,正好上午11时23分54秒触发,然后执行五次,每十秒钟. 从 ...

  2. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第六课 CronTrigger

    第六课 CronTrigger CronTrigger比SimpleTrigger更常用,当你需要一个基于日历般概念的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间. 使用Simp ...

  3. 【Linux探索之旅】第一部分第六课:Linux如何安装在虚拟机中

    内容简介 1.第一部分第六课:Linux如何安装在虚拟机中 2.第二部分第一课预告:终端Terminal,好戏上场 Linux如何安装在虚拟机中 虽然我们带大家一起在电脑的硬盘上安装了Ubuntu这个 ...

  4. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!

    原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...

  5. Spring官方文档翻译(1~6章)

    Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...

  6. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...

  7. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...

  8. NeHe OpenGL教程 第四十六课:全屏反走样

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击

    Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...

随机推荐

  1. oc-23-static

    #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * ...

  2. 【iOS开发必备指南合集】申请企业级IDP、真机调试、游戏接入GameCenter 指南(实现仿官方的成就提示)、游戏接入OpenFeint指南;

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...

  3. php.ini的配置

    一.user_agent ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') user_agent,再 ...

  4. 解决faststone capture在台式机上录制屏幕视频没有声音的问题

    点击屏幕录像机: 在弹出的屏幕录像机窗口中选择录制音频,然后点击选项按钮: 在弹出的选项按钮中选择视频选项,将所有的多选框都选中,注:最后一个选项录制windows XP的工具提示最好也选上,我发现如 ...

  5. UML 之 各种视图简介

    统一建模语言(Unified Modeling Language,UML)中各种视图并没有明显的概念区别. 在最上一层,视图被划分为三个视图域:结构,动态行为,模型管理. 结构主要描述了系统中的结构成 ...

  6. SQL操作XML

    前面一段时间为了赶项目的进度,一直在加班,现在空闲了下来将前面碰到的问题整理了一下,发现了一些十分有用的,在此记录下来,看能不能帮助到遇到同样问题的朋友,此文仅是自己个人的意见,若存在问题,还望不宁赐 ...

  7. Solr高亮显示highlight的三种实现

    高亮显示在搜索中使用的比较多,比较常用的有三种使用方式,如果要对某field做高亮显示,必须对该field设置stored=true      第一种是普通的高亮显示Highlighter,根据查询的 ...

  8. 新手教程之使用Xib自定义UITableViewCell

    新手教程之使用Xib自定义UITableViewCell 前言 首先:什么是UITableView?看图 其次:什么是cell? 然后:为什么要自定cell,UITableView不是自带的有cell ...

  9. (二)u-boot2013.01.01 for TQ210:《Makefile分析》

           当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解.本文比较侧重于语法句意的分析,框 ...

  10. 21世纪C语言(影印版)

    <21世纪C语言(影印版)> 基本信息 原书名:21st Century C 作者: Ben Klemens 出版社:东南大学出版社 ISBN:9787564142056 上架时间:201 ...