栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

cron表达式的详细介绍(各域说明以及举例说明)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cron表达式的详细介绍(各域说明以及举例说明)

cron表达式的详细介绍(各域说明以及举例说明)

1. 关于 cron

1.1 前言1.2 使用 cron 的注意点1.3 举个例子 2. cron表达式的格式(或语法)3. 各域的含义——如何取值?

3.1 各域的含义介绍3.2 特殊字符的含义3.3 简单举例说明及使用效果

1. 关于 cron 1.1 前言

这两天在弄定时任务,感觉 cron 表达式挺有意思,有必要写下来供大家参考学习。了解过 crontab 的应该都知道 crontab 怎么配置定时任务,其实cron 与 crontab 差不多,但需要注意的是:cron 表达式从左往右,从秒开始;而 crontab 则是从分钟开始的。 1.2 使用 cron 的注意点

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

看下面的错误信息:

原因是Spring 的表达式 只是 cron表达式的子集,它不包含year字段,并且不能使用部分特殊字符,比如上面的 #。举这个两个报错信息是干什么呢?意思是下面关于的特殊字符都会介绍,但是有可能你在使用的时候,因为使用的软件不一样,可能效果没用达到,但是不代表语法有误,你要分场合分情况使用,这点在此特别说明一下! 2. cron表达式的格式(或语法)

比如,cron = "0 30 * * * ? " 代表啥意思呢?往下看,看完你就会明白了!Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

 ① Seconds Minutes Hours DayofMonth Month DayofWeek 
 
 ② Seconds Minutes Hours DayofMonth Month DayofWeek  Year

即:

秒  分钟  小时  日期   月份  星期  年(年份可留空,通常省略)
3. 各域的含义——如何取值? 3.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,  -  *  / 四个字符标准实现不支持此字段。
3.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秒执行
3.3 简单举例说明及使用效果

比如:cron = “6/10 * * * * ?”,06秒开始,然后每次间隔10秒

为了方便,接下来我们举例都直接在线验证效果啦!比如:0 10,30 12 * * ? 或者 0 10,30 12 ? * *,每天12点的10分和30分执行任务
比如:0 30 14-17 * * ? *,每天下午14点到17点中的半点执行

好了,就简单举几个就行了,比葫芦画瓢的东西,自己看着画吧

推荐几个自动生成以及验证cron的网址:https://www.matools.com/cron.http://cron.ciding.cc/.https://cron.qqe2.com/.https://www.bejson.com/othertools/cron/. 上述网站,喜欢就用,不喜欢别吐槽,自己厉害也不用他们,自己再厉害也可以做个给我们大家!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号