反馈已提交

网络繁忙

定时调度执行频率之表达式设定

  • 文档创建者:文档助手1
  • 历史版本:15
  • 最近更新:Suki陈 于 2023-04-11
  • 1. 概述

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

    1571640611156151.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. Cron表达式

    Cron表达式为一个字符串,由 5 个或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个时间范围。

    Cron有如下两种语法格式: 

    • Seconds Minutes Hours DayofMonth Month DayofWeek Year

    • Seconds Minutes Hours DayofMonth Month DayofWeek

    从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份(可选)。

    3.1 域

    每一个域可出现的字符如下: 

    允许值  允许的特殊字符
      秒(Seconds)  0~59的整数  , - * /    四个字符
      分(Minutes)  0-59的整数  , - * /    四个字符
      小时(Hours)  0-23的整数  , - * /    四个字符
      日期(DayofMonth)  0-31的整数(但是需要考虑月的天数)  ,- * ? / L W C     八个字符
      月份(Month)  1-12的整数或英文JAN-DEC  , - * /    四个字符
      星期(DayofWeek)  1-7的整数或英文SUN-SAT(1=SUN, 2=MON,...)  , - * ? / L C #     八个字符
      年份(Year)  1970-2099 , - * /    四个字符

    每一个域除了使用数字还可以出现特殊字符,其中特殊字符的含义如下: 

    字符
    含义
    表示匹配该域的任意值,假如在 Minutes 域使用 *,即表示每分钟都会触发事件;
    ?只能用在 DayofMonth(日期)和 DayofWeek(星期)两个域。它也匹配域的任意值,但实际不会。因为 DayofMonth 和 DayofWeek 会相互影响。例如想在每月的 20 日触发调度,不管 20 日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?,其中最后一位只能用 ?,而不能使用 *,如果使用 * 表示不管星期几都会触发,实际上并不是这样;
    -表示范围,例如在 Minutes 域使用 5-20,表示从 5 分到 20 分钟每分钟触发一次;
    表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用 5/20,则意味着 5 分钟触发一次,而 25,45等分别触发一次;
    ,表示列出枚举值。例如:在Minutes域使用 5,20,则意味着在 5 和 20 分每分钟触发一次;
    L该字符只在 DayofMonth(日期)和 DayofWeek(星期)域中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的 31 号,非闰年二月的 28 号;如果L用在星期中,则表示星期六,等同于7。但是,如果 L 在前面有一个数值 X ,它就具有其他含义了。例如,月份中的 6L 表示该月的倒数第六天;星期域中的 FRIL 表示这个月的最后一个星期五。
    W该字符只能出现在 DayofMonth(日期)域里,是对前导日期的修饰,表示离该日期最近的工作日(周一到周五)。例如 15W 表示离该月15 号最近的工作日,如果该月15 号是星期六,则匹配 14 号星期五;如果15 日是星期日,则匹配 16 号星期一;如果 15 号是星期二,那结果就是15 号星期二。但必须注意关联的匹配日期不能够跨月,如你指定 1W,如果 1 号是星期六,结果匹配的是 3 号星期一,而非上个月最后的那天。W 字符串只能指定单一日期,而不能指定日期范围;
    LW在 DayofMonth 字段可以组合使用 LW,它的意思是当月的最后一个工作日(周一到周五);
    C该字符只在 DayofMonth(日期)和 DayofWeek(星期)域中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如:5C 在日期字段中就相当于日历 5 日以后的第一天;1C 在星期字段中相当于星期日后的第一天;
    #该字符只能在 DayofWeek(星期)域中使用,表示当月某个工作日(周一到周五)。如 6#3 表示当月的第三个星期五( 6 表示星期五,#3表示当前的第三个);而 4#5 表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;

    3.2 示例

    Cron表达式示例如下:

    注:用户可参考 Cron 表达式在线生成工具 检查写的表达式是否正确,确保正确以后填入。 

      表达式 含义  
    */5 * * * * ?每隔 5 秒执行一次
    0 */1 * * * ?每隔 1 分钟执行一次
    0 0 */1 * * ?每隔 1 小时执行一次
    0 0 12 * * ?每天中午十二点触发
    0 0 0,13,18,21 * * ?每天的 0 点、13 点、18 点、21 点都触发一次
    0 0 0-8 * * ? 每天的 0-8点,每整点触发一次
    0 15 10 ? * *每天早上 10:15 触发
    0 15 10 * * ?每天早上 10:15 触发
    0 15 10 * * ? *每天早上 10:15 触发
    0 15 10 * * ? 20052005 年的 每天早上 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)

    附件列表


    主题: 数据决策系统
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持