【综合】Cron表达式

介绍

Crom表达式(Cron Expressions)用于表达一段时间内进行的次数,一般用于自动化操作中频率的设置。

可以用于linux中crontab定时任务以及schedule中间件的频率设置。

字段组成

Cron表达式由7个字段组成,最后一个字段为可选。

//秒、分、时、天、月、星期、年
0 0 12 * * ? 2017

7个字段分别是:秒、分、时、DAY-OF-WEEK(天)、月、WEEK-OF-DAY(星期)、年(可选)

每个字段上可以填写字段取值范围内的值,还可以使用特定字符来表达频率。

字段取值范围

这是每个字段的取值范围:

NameRequiredAllowed ValuesAllowed Special Characters
SecondsY0-59, - * /
MinutesY0-59, - * /
HoursY0-23, - * /
day of monthY1-31, - * ? / L W C
MonthY0-11 or JAN-DEC, - * /
day of weekY1-7 or SUN-SAT, - * ? / L C #
YearNempty or 1970-2099, - * /

通用特定字符

符号描述
*代表所有(all)
,代表多个选项,比如:1,2,3
-代表一个范围,比如1-15
/增长起点与步长,0/5代表:5 10 15 20 25 …

特殊特定字符

符号描述
?适用于day of month与day of week字段,想当于禁用的意思,如果选择了使用天这个字段,则在星期字段使用?标识
L代表LAST,最后。在day of month中代表一个月中的最后一天(Last day of month),在day of week中标识,最后一个星期的某一天。6L最后一个星期五。
W适用于day of month天字段,定义每个月中的星期,10W代表离10最近的工作日,如果10号是星期日,那么会在11号星期一触发。如果11号是星期六,那么会在10号星期五触发。
#适用于day-of-week这个字段,代表每个月第nth个工作日,6#3代表,这个月第三个星期五

示例

At 12:00 pm (noon) every day during the year 2017

1.2017年的每天中午12点触发

//第四个字段和第六个字段:DAY OF MONTH 和 DAY OF WEEK 成互斥关系,每个表达式中必定有一个为?
//在这个表达式中,每天都需要进行,那么无关星期,所以DAY OF WEEK为?
0 0 12 * * ? 2017 

Every 5 minutes starting at 1 pm and ending on 1:55 pm and then starting at 6 pm and ending at 6:55 pm, every day

2.每天中午1点开始到1点55,以及每天下午6点到6点55,每五分钟触发

0 0-55/5 13,18 * * ?
等同于
0 0/5 13,18 * * ?  //由于60分,h(小时)位已经改变,所以也可以这么写

Every minute starting at 1 pm and ending on 1:05 pm, every day

3.每天中午1点到1点5分,每分钟触发

0 0-5/1 13 * * ?
//默认的步长就是1,分钟位一分钟一分钟增加

At 1:15 pm and 1:45 pm every Tuesday in the month of June

4.每年6月份的每个星期2的中午1点14和1点45

0 15,45 13 ? 5 3
0 15,45 13 ? 5 Tue
//星期从星期日开始算,星期二就是3,可以写成Tue 更容易理解

At 9:30 am every Monday, Tuesday, Wednesday, Thursday, and Friday

5.每个工作日的9点30

0 30 9 ? * 2-6 
0 30 9 ? * Mon-Fri 

At 9:30 am on 15th day of every month

6.每个月份中第15天的9点30

0 30 9 15 * ?

At 6 pm on the last day of every month

7.每个月最后一点的下午6点

0 0 18 L * ?

At 6 pm on the 3rd to last day of every month

8.每个月的第三天到最后一天的下午6点

0 0 18 L-3 * ?
//问题 L-3和3-L有区别吗?

At 10:30 am on the last Thursday of every month

9.每个月的最后一个星期四的早上10点

0 30 10 ? * 5L

At 6 pm on the last Friday of every month during the years 2015, 2016 and 2017

在2015-2017年中,每个月的最后一个星期五的下午6点

0 0 18 ? * 6L 2015-2017

At 10 am on the third Monday of every month

每个月的第三个星期一的早上10点钟

0 0 10 ? * 2#3

At 12 am midnight on every day for five days starting on the 10th day of the month

从每个月的第十天开始,每天中午12点触发,每5天执行一次。(博主第一次翻译错了,以为是从10号-15号,for 5 days 翻译成持续5天)

0 0 12 10/5 * ?

总结:

写好corn表达式主要需要明确好频率
区分好DAY OF MONTH 和 WEEK OF DAY
可以根据一些测试网站,进行测试。

本文参考:
baeldung
oracle

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值