文章目录
1. 基础表达式
基础表达式:* * * * * *
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
执行时机:每秒触发
2. 指定时刻表达式
2.1 指定枚举值
基础表达式:* 30 9,17 * * *
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
,
:枚举值
执行时机:每天的早上9:30
和下午17:30
触发
2.2 指定范围
基础表达式:* 30 9-12 * * *
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
-
:表示范围
执行时机:每天的9:30
、10:30
、11:30
、12:30
触发
4. 固定频率表达式
4.1 指定初始时间
基础表达式:* 0/5 * * * *
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
/
:表示起始时间开始触发,每隔固定时间触发一次
执行时机:每小时0分开始触发,之后每过5分钟触发一次
4.2 不指定初始时间
基础表达式:* */5 * * * *
各位含义:秒 分 时 日 月 周 年(可省略)
涉及通配符:
*
:任意值
/
:表示起始时间开始触发,每隔固定时间触发一次
执行时机:立刻触发,之后每过5分钟触发一次
5. 什么时候用"?"
我们在各种资料里经常见到* * * * * ?
这种形式的corn表达式,这里的?
也表示"任意值",那和*
有什么区别呢?
因为日期和星期在"都指定"或"都不指定"的情况下肯定是没有问题的,没有二义性。当只指定了一方,而另一方为*
的情况下,会有二义性,结果相当于没有指定。比如指定了日期,但没有指定星期,则不管周几都能触发;而指定了星期,没有指定日期,则每一天也能触发 。
所以正确的做法是在指定日期的时候,把对应的星期也指定上,或者指定星期的时候把日期也指定上,但这样做太麻烦了,也不现实,所以就有了?
这个通配符,在单独指定日期或星期的时候使用。
-
如何表示每周一早上8:30
正确答案:* 30 8 ? * MON
-
如何表示每月1号早上8:30
正确答案:* 30 8 1 * ?