Quartz 中的 Cron 表达式

  |   0 评论   |   0 浏览

Quartz 中的 Cron 表达式与 Unix 中的 cron 定时任务的表达式类似。

Cron 表达式由 7 个域(field)组成,它们之间用空格隔开,其中最后一个域(field)是可选的。

域的名称及其可配置的值

Field Name Allowed Values Allowed Special Characters
Seconds 0-59 , - * /
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day-of-month 1-31 , - * ? / L W
Month 0-11 or JAN-DEC , - * /
Day-of-Week 1-7 or SUN-SAT , - * ? / L #
Year (Optional) empty, 1970-2199 , - * /

特殊字符的用途

* ——用来指定所有值,比如,在 Minutes 中的 * 表示每一分钟。

? ——用来表示“没有特殊值”。

- ——用来指定一个范围,比如,若在 Hours 中指定 10-12,则表示:10点、11点和12点。

, ——用来指定多个值,比如,若在 Day-of-Week 中指定 MON,WED,FRI,则表示:周一、周三和周五。

/ ——用来指定时间间隔,/ 前面的值用来指定起点,后面的值用来指定时间间隔。比如,若在 Seconds 中指定 5/15,则表示:5秒、20秒、35秒和50秒。即:从第 5 秒开始,每次增加 15 秒。

L ——是 last 单词的缩写,用来指定每周的最后几天或者每月的最后几天。

W ——配合固定日期使用,用来表示 当月 中与指定日期最近的工作日(周一到周五),比如,若在 Day-of-Week 中指定了 15W,则如果 15 号是周六,那么离它最近的工作日就是周五 14 号;如果 15 号是周天,那么离它最近的就是下周一 16 号;如果 15 号本身就是工作日,那就是 15 号。

# ——用来指定每个月的第 n 个周几,比如,若在 Day-of-Week 中指定 6#3,则表示:这个月的第 3 个周五。

总的来说,每个域(field)中的子表达式通常可以是一个通配符(如*),一个值(如15),一个范围(如10-12),一个列表(如1,3,5)和一个时间间隔(如5/15)。另外,由于 Quartz 不支持同时对 Day-of-monthDay-of-Week 设定值,因此必须对其中一个设置 ?

示例

表达式 含义
0 0 12 * * ? 每天中午 12:00
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:00 到 2:59 期间的每 1 分钟
0 0/5 14 * * ? 每天下午 2:00 到 2:59 期间,每 5 分钟
0 0/5 14,18 * * ? 每天下午 2:00 到 2:59 期间和下午 6:00 到 6:59 期间,每 5 分钟
0 0-5 14 * * ? 每天下午 2:00 到 2:05 期间的每 1 分钟
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 2002-2005 2002到2005年期间,每月最后一个周五的上午 10:15
0 15 10 ? * 6#3 每月第三个周五的上午 10:15

相关资料
Cron Trigger Tutorial

CronExpression (Quartz Enterprise Job Scheduler 2.3.0-SNAPSHOT API)

CronTrigger (Quartz Enterprise Job Scheduler 2.3.0-SNAPSHOT API)