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-month
和 Day-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 |
相关资料
CronExpression (Quartz Enterprise Job Scheduler 2.3.0-SNAPSHOT API)
CronTrigger (Quartz Enterprise Job Scheduler 2.3.0-SNAPSHOT API)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于