欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

原文出处: waylau Quartz 是一个完 图纸加密 全由 Java 编写的开源企业级作业调度框架

点击: 次  来源:宝鼎软件 时间:2017-06-01

原文出处: waylau

Quartz 是一个完全由 Java 编写的开源企业级功课调治框架。在处理惩罚 CronTrigger 举办周期性任务触发时,需要举办时间的设置,个中就需要利用 Cron Expressions。本文将对 Cron Expressions 举办具体讲授。

什么是 Quartz Cron Expressions

Cron Expressions(Cron 表达式)是用来展示时间荟萃的字符串。在差异的系统可能框架上,Cron Expressions 的尺度会有所差别。对付 Quartz Cron Expressions 来说,它被用来设置 CronTrigger 实例,由空格离隔分7个子表达式:

  1. Seconds (秒):范畴为0-59的整数,可呈现, - * /四个字符;
  2. Minutes(分):范畴为0-59的整数,可呈现, - * /四个字符;
  3. Hours (时):范畴为0-23的整数,可呈现, - * /四个字符;
  4. Day-of-Month(日):范畴为1-31的整数,需要留意所选月的总日数,可呈现, - * /? L W C八个字符;
  5. Month(月):范畴为0-11的整数,可能利用字符串JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV 和 DEC。可呈现, - * /四个字符;
  6. Day-of-Week (周几):范畴为1-7 (1 为周日) ,可能利用字符串 SUN、MON、TUE、WED、THU、FRI 和 SAT。,可呈现, - * /? L W C八个字符;
  7. Year (年,可选),可呈现, - * /四个字符;

譬喻,Cron Expressions 字符串 0 0 12 ? * WED 暗示“每个礼拜三的12点”。

个中表达式中非凡字符的寄义为:

  • 通配符*可以被用来暗示域中“每个”大概的值。因此在”Month”域中的*暗示每个月,而在 Day-Of-Week 域中的*则暗示“周中的每一天”。
  • /字符用来暗示值的增量,譬喻, 假如分钟域中放入0/15,它暗示“从0开始,每隔15分钟”,软件开发,假如在分钟域中利用3/20,则暗示“从第3分钟开始,每隔20分钟”可能别的沟通的形式就是3,23,43
  • ?字符可以用在 day-of-month 及 day-of-week 域中,劳务派遣管理系统,它用来暗示“没有指定值”。这对付需要指定一个可能两个域的值而不需要对其他域举办配置来说相当有用。
  • L字符可以在 day-of-month 及 day-of-week 中利用,这个字符是”last”的简写,可是在两个域中的意义差异。譬喻,在 day-of-month 域中的L暗示这个月的最后一天,即,一月的31日,非闰年的二月的28日。假如它用在 day-of-week 中,则暗示7可能SAT。可是假如在 day-of-week 域中,这个字符跟在此外值后头,则暗示”当月的最后的周XXX”。譬喻:”6L” 可能 “FRIL”都暗示本月的最后一个周五。当利用L选项时,最重要的是不要指定列表可能值范畴,不然会导致杂乱。
  • W字符用来指定间隔给定日最靠近的周几(在 day-of-week 域中指定)。譬喻:假如你为 day-of-month 域指定为15W,则暗示“间隔月中15号最近的周几”。
  • #暗示暗示月中的第几个周几。譬喻:day-of-week 域中的6#3 可能 FRI#3暗示“月中第三个周五”。
  • 例子

    下面是几个常见的 Quartz Cron Expressions 例子:

  • 0 0/5 * * * ?: 每隔5分钟触发一次
  • 10 0/5 * * * ?: 在每分钟的10秒后每隔5分钟触发一次的表达式(譬喻. 10:00:10 am, 10:05:10等.)。
  • 0 30 10-13 ? * WED,FRI : 在每个周三和周五的 10:30,11:30,12:30 触发。
  • 0 0/30 8-9 5,20 * ?: 在每个月的5号、20号的8点和10点之间每隔半个小时触发一次且不包罗10点,只是8:30,9:00和9:30的表达式。
  • 有些日程需求大概过于巨大而不能用单个表达式表述,譬喻:9:00到10:00之间每隔5分钟触发一次,下午1:00到10点每隔20分钟触发一次。这个办理方案就是建设两个触发器,软件开发,两个触发器都运行沟通的任务。

    下面是构建 CronTrigger 的例子:

    导包:

    import static org.quartz.TriggerBuilder.*;
    import static org.quartz.CronScheduleBuilder.*;
    import static org.quartz.DateBuilder.*:

    实例化一个 CronTrigger,天天 10:42 按期触发:

    trigger = newTrigger()
      .withIdentity("trigger3", "group1")
      .withSchedule(dailyAtHourAndMinute(10, 42))
      .forJob(myJobKey)
      .build();

    可能利用:

    trigger = newTrigger()
        .withIdentity("trigger3", "group1")
        .withSchedule(cronSchedule("0 42 10 * * ?"))
        .forJob(myJobKey)
        .build();

    参考引用

  • https://en.wikipedia.org/wiki/Cron#CRON_expression
  • http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-06.html