Cron表达式

一、简介

Cron表达式用于在特定时间自动执行任务,非常适合于计划备份、发送通知、自动更新等操作。

  • 了解过 crontab 的应该都知道 crontab 怎么配置定时任务,其实cron 与 crontab 差不多,但需要注意的是:cron 表达式从左往右,从开始;而 crontab 则是从分钟开始的。

使用 cron 的注意点

  • cron 表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样,需要注意:Linux 、Java(Spring) 、Java(Quartz) 的区别,本文主要以Java为主,说一下 cron 表达式),表示一组时间,通常作为执行某个程序的时间表。
  • 注释以注释标记#开始,并且必须单独在一行上。

二、格式介绍

  • Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
 Seconds Minutes Hours DayofMonth Month DayofWeek 
 秒      分      时     月中的几号 月     一周中的周几 

 Seconds Minutes Hours DayofMonth Month DayofWeek    Year
 秒      分      时     月中的几号 月     一周中的周几  年(年份可留空,通常省略)

1.各个域的介绍

每一个域都使用数字,但还可以出现下面表格里的特殊字符,如下表格:

取值范围允许的特殊字符是否必填备注
秒-Seconds0~59的整数,  -  *   / 四个字符 是 标准实现不支持此字段。
分钟-Minutes0~59的整数,  -  *  / 四个字符
小时-Hours0~23的整数,  -  *  / 四个字符
日期-DayofMonth1~31的整数(但是你需要考虑你月的天数), -  *   /  ?  L  W  C 八个字符?LW只有部分软件实现了
月份-Month1~12的整数 或者  JAN-DEC,  -  *  / 四 个字符
星期-DayofWeek1~7的整数 或者  SUN-SAT,  -  *  /  ?  L  C  # 八个字符? L #只有部分软件实现了, Linux 和 Spring 的允许值为0-7,0和7为周日;Quartz的允许值为1-7,1为周日
年-Year1970~2099,  -  *  / 四个字符标准实现不支持此字段。


2.特殊字符的含义

含义解释说明
*表示匹配该域的任意值如果在 Minutes 域使用 * , 则表示每分钟都会触发事件。
,表示列出枚举值如果在Hours 域中使用 9,10 则表示上午9点和10点会出发事件。
-表示范围如果在 Seconds 域中使用 5-8 ,则表示 5秒、6秒、7秒、8秒 时间点会触发事件
/表示起始时间开始触发,然后每隔固定时间触发一次如果在 Seconds 域中使用 6/10 ,则表示从06秒开始,每10秒执行一次,即:会在 06,16,26,36,56时间点触发事件,也就是说:在 Seconds 域中配置 6/10 和 配置 06,16,26,36,56 效果一样
?只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。(可以理解成是 * 的第二种特殊写法)例如:15 30 12 9 * ? ,表示的是每月9号的中午12:30:15发工资,此时 DayofWeek 这个域就要用 ? 而不能用 *(表示每周每天,而我们只要9号一天)
L表示最后Last,只能出现在 DayofWeek 和 DayofMonth 域。① 用在DayofMonth 域中(直接写L),可以指定一个月的最后一天;② 用在 DayofWeek 域中指定当月最后一个星期X(比如:2L指本月最后一个星期二)
W表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件例如:在 DayofMonth 使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 。
LW这两个字符可以连用,表示在某个月最后一个工作日,即当月最后一个星期五。
C代表“Calendar”的意思。但是没发现加C和不加C的区别。例如:15 30 12 9 * ?,用9和9C的效果一样。
#用于确定每个月第几个星期几,只能出现在DayofWeek域。比如,4#2,表示某月的第二个星期三(4代表星期三,2代表第几个)。例如:15 30 12 ? * 4#2表示:每月第二个星期三的12:30:15秒执行

三、示例:

这里列举一些常见的Cron表达式使用示例,以及它们对应的含义:

Cron表达式可以根据不同的需要指定特定的日期、月份、周几和年份。这里是一些常见的Cron表达式示例,每个示例都针对特定的日期、月份、周几和年份进行了设置:

1. 每月的某日、某小时某分钟执行

分  时  日 月 周

0  15  10  * *

这个表达式表示在每个月的第10天的15:00执行任务。

2. 每月的第一个周一执行

分 时 日 月 周

0  9  *  * 1

这个表达式表示每个月的第一个周一的9:00执行任务。

3. 每年的某月某日某时某分执行

分 时 日 月 周 年 
0  0  1  1  *

这个表达式表示在每年的1月1日的午夜执行任务。

4. 每年的某月某周某日某时某分执行

分 时 日 月 周 年 
0  0  * 12  1

5.每分钟执行一次

* * * * *

这个Cron表达式表示在每分钟的每一秒都执行任务。

6.每小时的第5分钟执行

5 * * * *

此表达式代表在每小时的第5分钟执行一次任务。

7.每天的午夜12点执行

0 0 * * *

这代表每天在午夜12点(00:00:00)执行任务。

8.每天的下午3点执行

0 15 * * *

此表达式在每天的15:00(即下午3点)执行任务。

9.每周一的午夜12点执行

0 0 * * 1

这意味着在每周一的午夜12点执行任务。

10.每月1日的午夜12点执行

0 0 1 * *

这代表每个月的第一天午夜12点执行任务。

11.每年1月1日的午夜12点执行

0 0 1 1 *

此表达式表示每年1月1日午夜12点执行任务。

12.每30分钟执行一次

*/30 * * * *

这个表达式代表每30分钟执行一次任务。

13.复合条件的例子:工作日(周一到周五)每天上午9:00执行

0 9 * * 1-5

这个表达式表示每周的工作日(星期一到星期五)上午9点执行任务。

14.使用年字段的例子(不是所有系统都支持):每年的12月31日午夜执行

0 0 31 12 * 2023

此表达式表示在2023年12月31日午夜执行任务。

Cron表达式的这些示例可以根据具体需要进行调整和组合,以适应不同的自动化任务需求。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值