zoukankan      html  css  js  c++  java
  • Quartz任务调度(2)CronTrigger定制个性化调度方案

    Cron表达式

    1. 时间字段与基本格式

    Cron表达式有6或7个空格分割的时间字段组成:

    位置时间域名允许值允许的特殊字符
    1 0-59 ,-*/
    2 分支 0-59 ,-*?/
    3 小时 0-23 ,-*/
    4 日期 1-31 ,-*/LWC
    5 月份 1-12或 JAN-DEC ,-*/
    6 星期 1-7 或 SUN-SAT ,-*?/LC#
    7 年(可选) 1970-2099 ,-*/

    在月份和星期中,我们也可以使用英文单词的缩写形式

    2. 特殊字符

    在Cron表达式的时间字段中,除允许设置数值外,还能你使用一些特殊的字符,提供列表、范围、通配符等功能

    1. 星号(*)

    可用在所有字段下,表示对应时间域名的每一个时刻,如*用在分钟字段,表示“每分钟”。

    2. 问号(?)

    只能用在日期和星期字段,代表无意义的值,比如使用L设定为当月的最后一天,则配置日期配置就没有意义了,可用?作占位符的作用。

    3. 减号(-)

    表示一个范围,如在日期字段5-10,表示从五号到10号,相当于使用逗号的5,6,7,8,9,10

    4. 逗号(,)

    表示一个并列有效值,比如在月份字段使用JAN,DEC表示1月和12月

    5. 斜杠(/)

    x/y表示一个等步长序列,x为起始值,y为增量步长值,如在小时使用1/3相当于1,4,7,10当时用*/y时,相当于0/y

    6. L

    L(Last)只能在日期和星期字段使用,但意思不同。在日期字段,表示当月最后一天,在星期字段,表示星期六(如果按星期天为一星期的第一天的概念,星期六就是最后一天。如果L在星期字段,且前面有一个整数值X,表示“这个月的最后一个星期X”,比如3L表示某个月的最后一个星期二

    7. W

    选择离给定日期最近的工作日(周一至周五)。例如你指定“15W”作为day of month字段的值,就意味着“每个月与15号最近的工作日”。所以,如果15号是周六,则触发器会在14号(周五)触发。如果15号是周日,则触发器会在16号(周一)触发。如果15号是周二,则触发器会在15号(周二)触发。但是,如果你指定“1W”作为day of month字段的值,且1号是周六,则触发器会在3号(周一)触发。quartz不会“跳出”月份的界限。

    8. LW组合

    在日期字段可以组合使用LW,表示当月最后一个工作日(周一至周五)

    9. 井号(#)

    只能在星期字段中使用指定每月第几个星期X。例如day of week字段的“6#3”,就意味着“每月第3个星期五”(day3=星期五,#3=第三个);“2#1”就意味着“每月第1个星期一”;“4#5”就意味着“每月第5个星期3。需要注意的是“#5”,如果在当月没有第5个星期三,则触发器不会触发。

    10. C

    只能在日期和星期字段中使用,表示计划所关联的诶其,如果日期没有被关联,相当于日历中的所有日期,如5C在日期字段相当于5号之后的第一天,1C在日期字段使用相当于星期填后的第一天

    3. 一些实例

    Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。如MON和mon是一样的

    cron表达式含义
    0 0 12 * * ? 每天12点整触发一次
    0 15 10 ? * * 每天10点15分触发一次
    0 15 10 * * ? 每天10点15分触发一次
    0 15 10 * * ? * 每天10点15分触发一次
    0 15 10 * * ? 2005 2005年内每天10点15分触发一次
    0 * 14 * * ? 每天的2点整至2点59分,每分钟触发一次
    0 0/5 14 * * ? 每天的2点整至2点55分,每5分钟触发一次
    0 0/5 14,18 * * ? 每天的2点整至2点55分以及18点整至18点55分,每5分钟触发一次
    0 0-5 14 * * ? 每天的2点整至2点5分,每分钟触发一次
    0 10,44 14 ? 3 WED 每年3月的每个星期三的2点10分以及2点44分触发一次
    0 15 10 ? * MON-FRI 每月周一、周二、周三、周四、周五的10点15分触发一次
    0 15 10 15 * ? 每月15的10点15分触发一次
    0 15 10 L * ? 每月最后一天的10点15分触发一次
    0 15 10 ? * 6L 每月最后一个周五的10点15分触发一次
    0 15 10 ? * 6L 每月最后一个周五的10点15分触发一次
    0 15 10 ? * 6L 2002-2005 2002年至2005年间,每月最后一个周五的10点15分触发一次
    0 15 10 ? * 6#3 每月第三个周五的10点15触发一次
    0 0 12 1/5 * ? 每月1号开始,每5天的12点整触发一次
    0 11 11 11 11 ? 每年11月11日11点11分触发一次

    使用示例

    在quartz1.+版本中,我们通过如下方法创建CronTrigger

    //定义调度触发规则,每天上午10:15执行  
    CronTrigger cornTrigger=new CronTrigger("cronTrigger","triggerGroup");  
    //执行规则表达式  
    cornTrigger.setCronExpression("0 15 10 * * ? *");

    而在2.+版本中,则通过如下方式创建

    //使用cornTrigger规则  每天10点42分  
    Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")  
        .withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *"))  
        .startNow().build();
  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/deityjian/p/11673484.html
Copyright © 2011-2022 走看看