1. 基础表达式
基础表达式:* * * * * ?
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
执行时机:每秒触发
示例:当时钟的时间变成
2022-02-22 22:22:22
这一瞬间,就满足了该表达式,就会触发;下一次触发时间:2022-02-22 22:22:23
2. 复杂表达式
2.1 指定枚举值
基础表达式:0 30 9,17 * * ?
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
,
:枚举值
执行时机:每天的早上09:30:00
和下午17:30:00
触发
示例:当时钟的时间变成
2022-02-22 09:30:00
这一瞬间,就满足了该表达式,就会触发;下一次触发时间:2022-02-22 17:30:00
2.2 指定范围
基础表达式:0 30 9-12 * * ?
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
-
:表示范围
执行时机:每天的09:30:00
、10:30:00
、11:30:00
、12:30:00
触发
示例:当时钟的时间变成
2022-02-22 09:30:00
这一瞬间,就满足了该表达式,就会触发;下一次触发时间:2022-02-22 10:30:00
2.3 指定间隔
基础表达式:0 0/5 * * * ?
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
/
:表示起始时间开始触发,每隔固定时间触发一次
执行时机:每小时0分0秒开始触发,之后每过5分钟触发一次
示例:当时钟的时间变成
2022-02-22 09:00:00
这一瞬间,满足了表达式0 0 * * * ?
,就会触发;下一次触发时间:2022-02-22 09:05:00
3. 什么时候用"?"
上面我们看到都是* * * * * ?
这种形式的corn表达式,为了前面不增加难度一直没有解释,这里的?
也表示"任意值",那和*
有什么区别呢?
因为日期和星期都表示“哪一天”,都具有日期属性,所以他们是一对冲突的存在,为了能在指定日期的时候忽略星期,或者在指定星期的时候忽略日期的影响,所以就有了?
这个通配符,以便做二选一。
-
如何表示每周一早上08:30:00
示例:0 30 8 ? * MON
-
如何表示每月1号早上08:30:00
示例:0 30 8 1 * ?