不做浮躁的人
正在行走的人...
posts - 171,  comments - 51,  trackbacks - 0

Cron 表达式包括以下 7 个字段:

  • 小时
  • 月内日期
  • 周内日期
  • 年(可选字段)
Field Name Mandatory? Allowed Values Allowed Special Characters
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W C
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L C #
Year NO empty, 1970-2099 , - * /

  • 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。

  • 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。

  • 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。

  • 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。

  • 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。

    一个cronString是一个字符串,包含6 7 个用空格分隔的域。6 个强制的和1 个可选的域如下:

    * 字符用于指定所有的值。例如,minute 域中的* 意为每分钟。

    ? 字符用于day-of-month day-of-week 域。它被用于指定非特定值。这是有用的,当你需要在2个域中的一个,而不是另一个指定什么时。请参考以下的实例。

    - 字符用于指定范围。例如hour 域中的10-12 意为1011 12 点。

    , 字符用于指定增值。例如day-of-week 域中的MONWEDFRI 意为星期一,星期三和星期五。

    / 字符用于指定增量。例如,seconds 域中的0/15 意为01530 45 秒。seconds域中的5/15 意为52035 50 秒。你也可在* 字符后指定/ – 在这个实例中,* 等价于在/ 前有0

    L 字符用于day-of-month day-of-week 域。这个字符是last 的简写,但它在2 个域中有不同意思。例如,day-of-month field 中的值L 意为一个月中的最后一天-一月31,非闰年的二月28。如果单独在day-of-week field 使用,它仅仅意为7 SAT。但是如果在 day-of-week域中另一个值后使用,它意为这个月的倒数xxx 例如6L 意为此月的最后一个星期五。当使用L 选项时,指定列表或值的范围很重要,因为其具有二义性。

    W 字符用于day-of-month 域。这个字符用于指定临近给定某天最近的工作日(Monday-Friday)。作为一个实例,如果你指定15W 作为day-of-month 域的值,意为:距离此月15日最近的工作日。因为如果15日是星期六,触发器将在星期五,也就是14fire。如果15日是星期天,触发器将在星期一,也就是16fire。如果15 日是星期二,那么它将在星期二,15日(也就是当天)fire。然而,如果你指定1W 作为day-of-month 的值,如果1号是星期六,触发器将在星期一,也就是3fire,因为它在一个月的边界上不跳转。当day-of-month 是一个single day,而不是一个范围或是days 的列表时,才指定W 字符。

    L W 字符也可在day-of-month 表达式上组合,产生LW,它翻译成此月的最后一个工作日。

    # 字符用于day-of-week 域。这个字符用于指定此月的第n 天。例如,day-of-week 域中的6#3 值意为此月中的第三个星期五( 6 = 星期五且"#3" = 此月的3)。其它实例:"2#1" = month 中的首个Monday"4#5" = month 中的第五个Wednesday。注意如果你指定#5,在此月中给定的day-of-week 没有5 个,那么那个月不会发生firing

    C 字符用于day-of-month day-of-week 域。这个字符是calendar 的简写。这意味着如果有任何关联的calendar,根据它计算值。如果没有关联的calendar,那么它等价于有一个all-inclusive calendarday-of-month 域中的5C 的值意为first day included by calendar on or after 5thday-of-week 域中的1C 的值意为first day included by calendar on or after sunday

    合法字符和months days of week 的名字不是大小写敏感的。

    这里是一些完整实例:

  • posted on 2007-07-18 10:46 不做浮躁的人 阅读(2407) 评论(2)  编辑  收藏

    FeedBack:
    # re: Cron 表达式的写法。
    2007-07-19 09:56 | BeanSoft
    cron 相当于 Windows 下的计划任务. 我们以前公司用它做 Weblogic 定时重启, 以及报表, 挺不错的.  回复  更多评论
      
    # re: Cron 表达式的写法。
    2007-07-19 17:16 | 小雪飞刀
    楼主借阅了我的随笔,你记得要注明出处!!!
    我的随笔:
    http://www.blogjava.net/allen-zhe/archive/2007/01/09/92668.html  回复  更多评论
      

    只有注册用户登录后才能发表评论。


    网站导航:
     

    <2007年7月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用链接

    留言簿(9)

    随笔分类(31)

    随笔档案(75)

    文章分类(1)

    文章档案(3)

    搜索

    •  

    最新评论

    阅读排行榜

    评论排行榜