历史版本9 :定时调度执行频率之表达式设定 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

定时任务,顾名思义,就是在某个固定的时间点出发某一个事件(任务),显然,在定义定时任务的过程中,必须要设置任务执行的时间点,但是该任务可能是每天重复执行,隔日重复执行或者是单次执行等等各种不同组合的触发时间点,这时可以通过表达式设定,如下图所示:

26.png

2. 定时表达式编辑

定时表达式设定为新引入的通过 cronExpression 来设定的机制,定时表达式设定的文本框可自己手动填写 cronExpression,也可通过点击旁边的「查看预置表达式」按钮来直接选择相应的表达式。点击「查看预置表达式」按钮时,展开预置表达式窗口,点击其中的文字说明,则其上的文本框显示并保存相应的 cronExpression,再次点击「收起预置表达式」按钮时收起预置表达式窗口。如下图所示:
27.png

预置表达式有以下几个:

  • a. 每月最后一天 19 点 50 分:0 50 19 L * ?

  • b. 每月最后一个工作日 19 点 50 分:0 50 19 LW * ?

  • c. 每月第 4 个周五 19 点 50 分:0 50 19 ? * 6#4

  • d. 2018 年第 4 季度每天 19 点 50 分:0 50 19 * 10-12 ? 2018

  • e. 每个工作日早上 9 点和晚上 6 点:0 0 9,18 ? * MON-FRI

3. cronExpression编辑

一个 Cron- 表达式是一个六至七个字段(字段包括固定的值和具有特殊意义的字符)组成,由空格分隔的字符串,其中秒、分、小时、日、月、周几这 6 个字段是必须的(顺序不可变更,从左至右),年是可选的,如下图所示:

  字段名 允许的值允许的特殊字符  
  秒0-59  , - * /  
  分0-59  , - * / 
  小时0-23  , - * /   
  日1-31  , - * ? /  L W  
  月1-12 or JAN-DEC  , - * /  
  周几1-7 or SUN-SAT  , - * ? /  L #
  年(可选字段)empty, 1970-2099  , - * /  
  • '*' 字符可以用于所有字段含义为:「每一」,如:在「分」字段中「*」表示「每一分钟」。

  • '?' 字符可以用在「日」和「周几」字段含义为:「不明确的值」,如:需要指定「周三」这个值,那么在「日」字段里面就需要使用「?」,因为不确定周三那天会是几号。

  • '-' 字符可以用于所有字段含义为:「值的范围」,如:在「小时」字段中设为「10-12」表示「10 点到 12 点」。

  • ',' 字符可以用于所有字段含义为:「指定多个值」,如:在「周几」字段中设为「MON,WED,FRI」表示「周一,周三和周五」。

  • '/' 。 含义为:「值的的增加幅度」,如:在「秒」字段中设置为「0/15」表示「第 0, 15, 30, 和 45 秒」,成等差数列递增,增值为 15,最大值不能超过允许的最大值 60; 在'/'前加「*」字符相当于指定从 0 秒开始;每个字段都有一系列可以开始或结束的数值,开始的值不能大于允许的最大值,结束的值也不能大于允许的最大值。

  • 'L'字符可用在「日」和「周几」这两个字段含义为:「是「last」的缩写,表示最后」,如:「日」字段中的「L」表示「一个月中的最后一天」;而在「周几」字段中, 它简单的表示「7」 or 「SAT」,但是如果在「周几」字段中使用时跟在某个数字之后, 它表示「该月最后一个星期×」, 例如 6L 表示「该月最后一个周五」。

  • 'W' 可用于「日」字段含义为:「离给定日期最近的工作日(周一到周五) 」,如:将「日」字段设为「15W」,意为: 「离该月 15 号最近的工作日」。因此如果 15 号为周六,触发器会在 14 号即周五触发,如果 15 号为周日, 触发器会在 16 号也就是周一触发,如果 15 号为周二,那么当天就会触发。然而如果你将「日」字段设为「1W」, 而一号又是周六, 触发器会于下周一也就是当月的 3 号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于「日」字段的值为单独的一天而不是一系列值的时候。

  • 'L'和'W'可以组合用于「日」字段表示为'LW'含义为:「该月最后一个工作日」

  • '#' 字符可用于「周几」字段含义为:「该月第几个周×」,如:「6#3」表示该月第三个周五( 6 表示周五而「#3」表示该月第三个)。注意如果你指定「#5」该月没有第五个「周×」,该月是不会触发的。

注:对于「月份」字段和「周几」字段来说合法的字符都不是大小写敏感的。

3.1 示例

下面列举一些完整的例子:

  表达式 含义  
0 0 12 * * ?每天中午十二点触发
0 15 10 ? * *每天早上 10:15 触发
0 15 10 * * ?每天早上 10:15 触发
0 15 10 * * ? *每天早上 10:15 触发
0 15 10 * * ? 2005005 年的 每天早上 10:15 触发
0 * 14 * * ?每天从下午 2 点开始到 2 点 59 分每分钟一次触发
0 0/5 14 * * ?每天从下午 2 点开始到 2 点 55 分结束每 5 分钟一次触发
0 55/10 14,18 * * ?每天的下午 2 点 55 和 6 点 55 分触发
0 10,44 14 ? 3 WED三月的每周三的14:10和14: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 2002-20052002 年至 2005 年的每月最后一个周五的 10:15触发
0 15 10 ? * 6#3每月的第三个周五的 10:15 触发
0 0 0 L-2 * ? *每月倒数第二天(支持FineReport 10.0,不支持FineReport 9.0)