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


    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点之间每两分钟执行一次

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

    2、构建一个每天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();

    或者

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

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

    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();

    或者

    1 trigger = TriggerBuilder.Create()
    2     .WithIdentity("trigger3", "group1")
    3     .WithCronSchedule("0 42 10 ? * WED", x => x
    4         .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
    5     .ForJob(myJobKey)
    6     .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扩展方法):

    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();
  • 相关阅读:
    sklearn linear_model,svm,tree,naive bayes,ensemble
    便利过滤
    js下载
    小程序修改radio的大小
    el-tree 问题与需求
    jsp页面用html引入vue.js注意问题
    WebPack
    yarn
    vue-cli 4以上 vue.config.js
    Cannot find module 'core-js/modules/es6.regexp.constructor'
  • 原文地址:https://www.cnblogs.com/gsjlovenet/p/5912466.html
Copyright © 2020-2023  润新知