上篇讲了spring的任务调度功能,里面有cron表达式能更全面的处理我们的需求,今天来给大家讲讲cron表达式。
所有的Spring cron表达式都必须符合相同的格式,如* * * * * *,由六个空格分隔的时间和日期字段组成,每个字段都有自己的有效值范围:
┌───────────── 秒 (0-59)
│ ┌───────────── 分 (0 - 59)
│ │ ┌───────────── 时 (0 - 23)
│ │ │ ┌───────────── 日(月份的第几天) (1 - 31)
│ │ │ │ ┌───────────── 月份 (1 - 12) (或 JAN-DEC)
│ │ │ │ │ ┌───────────── 星期 (0 - 7)
│ │ │ │ │ │ (0 和 7 是星期天, 或者使用 MON-SUN)
│ │ │ │ │ │
* * * * * *
cron表达式的规则
- 字段可以是星号 (*),星号总是表示 “开始-结束”。对于月份中的某一天或星期字段,可以使用问号 (?) 来代替星号。
- 逗号 (,) 用于分隔列表中的项目。
- 用 (-) 分隔的两个数字表示一个数字范围。指定的范围是包含在内的。
- 在一个范围(或*)后加上/,表示数字值在范围内的间隔。
- 英文名称也可用于月份和星期字段。使用特定日期或月份的前三个字母(不区分大小写)。
- 日和星期字段可以包含 L 字符,该字符具有不同的含义
- 在日字段中,L 代表该月的最后一天。如果后面跟一个负偏移量(即L-n),则表示该月的倒数第N天。
- 在星期的字段中,L 代表一周的最后一天。如果前面有一个数字或三个字母的名称(dL 或 DDDL),则表示的是该月的最后一个星期(d 或 DDD)。
- 日字段可以是 nW,表示距离 n 月中的某一天最近的工作日。 如果 n 是星期六,则产生之前的星期五。 如果 n 落在星期日,则产生下一个星期一,如果 n 为 1 并且落在星期六,也会发生这种情况(即:1W 代表该月的第一个工作日)。
- 如果日字段为LW,则表示该月的最后一个工作日。
- 星期字段可以是 d#n(或 DDD#n),表示该月第 d(或 DDD)周的第 n 天。
给大家举个例子
cron表达式 | 含义 |
---|---|
0 0 * * * * | 每时每刻 |
*/10 * * * * * | 每十秒钟 |
0 0 8-10 * * * | 每天8点、9点和10点 |
0 0 6,19 * * * | 每天上午6:00和下午7:00 |
0 0/30 8-10 * * * | 每天 8:00、8:30、9:00、9:30、10:00 和 10:30 |
0 0 9-17 * * MON-FRI | 周一至周五 |
0 0 0 25 DEC ? | 每年圣诞节(12月25日)零时 |
0 0 0 L * * | 每月最后一天零时 |
0 0 0 L-3 * * | 每月倒数第三天零时 |
0 0 0 * * 5L | 每月最后一个星期五零时 |
0 0 0 * * THUL | 本月最后一个星期四零时 |
0 0 0 1W * * | 每月第一个工作日零时 |
0 0 0 LW * * | 本月最后一个工作日零时 |
0 0 0 ? * 5#2 | 每月第二个星期五零时 |
0 0 0 ? * MON#1 | 每月第一个星期一零时 |
0 0 0 ? * 6L * | 每月的最后一个星期五零时 |
需要注意的是,国外的星期跟国内的不一样,他们是1-7表示星期天到星期六