cron表达式

cron表达式含义:

cron表达式就是用来标记一个任务的执行时间的或者周期的公式,可以分为七个域,但是springTask中只有六种,不支持年。理解cron表达式是学习定时任务的核心,所有的框架中的核心依赖,都是它。

css 复制代码
秒 分 时 日 月 周 [年]

每个阈值的取值范围:

时间域 允许值 特殊字符
秒 0-59 * , - /
分 0-59 * , - /
时 0-23 * , - /
日 1-31 * , - / ? L W LW
月 1-12 或 JAN-DEC * , - /
周 1-7 或 SUN-SAT(1 = 周日) * , - / ? L #
年(可选) 留空 或 1970-2099 * , - /
周 这里为了避免歧义,建议还是写成Mon,Tue,Wed,Thu,Fri,Sat, Sun 刚好可以加强一下英语

简单示例

标题
* * * * * * 每秒钟执行一次
1 * * * * * 每分钟的第一秒执行一次
1 1 * * * * 每小时的第一分钟的第一秒执行一次
1 1 1 * * * 每天的第一个小时的第一分钟的第一秒执行一次

举这几个例子的目的在于,避免大家和我犯一样的错误,我一开始以为每个域上的数字就是在表示时间间隔。比如将1 1 * * * *理解为了每过一分钟加一秒执行一次。。。 实际上,在上述只有*这一个特殊字符的表达式中,应该这么来看: *表示的是一个通配符,现在,你想象着你有一个可以记录"月日十秒分再加上周几"的表。表不停的在走,并且每走一步都会和上述表达式进行匹配,如果匹配成功,则与该cron配套的定时任务就该执行了。 那么,表不管怎么走,都一定能和* * * * * *匹配,也就是每秒都在执行。那么是不是每分钟才会出现一次秒位为1的情况,也就是说每分钟的第一秒执行一次。

特殊字符含义

另外一个在所有域都可以使用的特殊字符是,可以用来拼接多个条件。比如, 3,5 * * * * *表示每秒以及每五秒都执行一次。当然,也可以3,5 7,9 * * * *,则表示每七分钟的第3和5秒执行一次,每九分钟的3和9秒也执行一次。

-就更好理解了,它表示范围3-5 7 * * * *。每个小时的第七分钟的第3,4,5秒都执行一次

/:表示给后续的任务指定一个间隔。15/5 7 * * * *表示的是从第十五秒开始,每五秒执行一次。

上述四个是全域通用的,下面几个要花一点功夫记一下 w表示最近的工作日(workday),但是切记想在每个工作日都执行,使用0 0 0 W * *是不行滴,W的正确用法是0 0 0 15W * *在每个月的15号这天,最近的那个工作日执行。或者是0 0 0 LW * *在每个月的最后一个工作日执行。L表示的就是最后一个的意思。

?的意思是不指定,因为同时指定日和星期几,可能会导致冲突,所以它也仅能在这两个域用。

  • 0 0 0 15 * ?:每月 15 日执行(不关心周几)。
  • 0 0 0 ? * MON:每月所有周一执行(不关心具体日期) # 则是专门为了数第几个星期几而开辟的。- SUN#4:表示每月的第四个周日。
相关推荐
小灰灰搞电子2 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
专业程序开发源3 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
卷无止境3 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
IT_陈寒4 小时前
JavaScript的闭包陷阱,这个坑我躺了三天才爬出来
前端·人工智能·后端
用户8356290780514 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design4 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
Mk598785 小时前
让 Agent 长出双手:一个注解搞定工具调用,AgentScope-Java @Tool 实战
后端
小溪学编程5 小时前
将 Bean 放入 Spring 容器中的方式有哪些?
java·后端·spring
Mk598785 小时前
一个 Markdown 文件就是一个员工 —— AgentScope-Java 多智能体编排实战(核心篇)
后端
imDwAaY6 小时前
微信运动每天晚上 10 点推送排行榜,技术上到底有多难?
后端