一看就懂:cron 表达式

【前言】

不知道你在玩游戏的时候是否发现过以下情况:

(1)玩某些游戏的时候,发现他的排行榜并不是时时更新的,而是每半个小时,或者一个小时更新一次。

(2)又比如很火的王者荣耀手游,它的日常任务,都是每天5点进行更新。

那么,这些时间控制,到底是由谁控制得如此精准呢?原来,这些都是corn表达式的功劳。

【1】什么是cron表达式 ?

在了解之前,我们先举几个例子,看看corn表达式长什么样子(这是我实际工作中的cron表达式具体应用场景)。

可以看到,corn表达式就是:由若干数字、空格、符号按一定的规则,组成的一组字符串,从而表达时间的信息。 

好像和正则表达式有点类似哈,都是一个字符串表示一些信息。

【2】cron 表达式标准结构

那么这个规则究竟是怎样的呢?我们继续往下了解。

从上面的三个例子中,我们可以看到,这个字符串被5个空格分成了6个部分。

假设我们以ABCDEF举例,它的标准格式为:"A B C D E F" 。

【3】cron 表达式具体含义

这个ABCDEF到底是什么意思呢?接下来是画重点的地方,认真看:

A表示秒,B表示分,C表示小时,D表示日,E表示月,F表示星期

故:"A B C D E F" --> "秒 分 时 日 月 星期"

可能有的人要跟我急了,为什么没有年呢?其实星期后面就是年,但这个年可加可不加,加上就是 "A B C D E F G" 格式。

为什么通常不加年呢?你见过哪些程序会指定在哪一年跑的?或者每几年跑一次的?

所以,年的实用性不大,加上又为了书写方便,规则上就干脆省掉了!当然加上也没错!

【4】前例解释

根据上面截图中的三个例子,我们这里提取出来,算了,直接再发一次:

从注释里我们可以了解到:

第1个:它的秒位为0,表示每个0秒,分位为*/5,意思是每5分钟。所以总的来说就是每5分钟(每5分0秒)时执行一次;

第2个:它的秒位为0,分位为30,时位为一串集合,则它的意思是每天 8点半、10点半、12点半、14点半、16点半、21点半各执行一次;

第3个:我想你已经知道它的意思了,没错,它就是每个小时整点(整点0分0秒)执行一次。

从上面三个列子中,我想你已经了解了orcn表达式的大致意思了:数字则表示具体时间,* 则表示任意时间,*/x 则表示每多少时间,还可以用集合表示具体的几个时间点。

【5】更多例子

(5.1)用短横线(-)表示时间段:

比如:我们的上班时间朝9晚6为(周一到周五的早上9点到晚上6点),则cron表达式为:0 0 9-18 * * MON-FRI

星期一到星期天的英文为:Monday,Tuesday、Wednesday、Thursday、Friday、Saturday 、Sunday ,取前三个字母,然后大写表示星期。

(5.2)用L表示最后,L是单词Last(最后的)的首字母:

比如:假设每个最后一天,下午2点发工资的时间,则cron表达式为:0 0 14 L * ?

注:如果没有具体说明是星期几,通常用问号代替。

其他不常用的功能 #,W 这里不就介绍了,想知道的朋友可以自己去查阅资料,因为在实际工作中,用得极少。

而我们最常用的就是在某个时间点,或者某些时间点执行程序,也就是【4】中的前例解释。

【6】cron 表达式用途

如前言所示,cron 表达式最主要的就是在程序中做一些定时任务,比如某些系统的报表数据,某些游戏的排行榜,由于这些数据量实时统计非常消耗程序性能,所以就每隔一段时间,通过自动任务跑一次,这样可以极大的提升用户浏览体验,要是在游戏里,还可以增加一种神秘感。

另外,某些具体点的数据拉取,比如你如果从事平台对接工作,要从某些平台下载你的订单,那么肯定是每隔多久抓一次。

又比如你写个爬虫,要实时的了解你的某些数据,然后从这些数据中反应你的情况。

比如:我的CSDN每小时访问情况(每小时获取一次CSDN访问数据)

实战例子:springboot基于注解实现自动任务

【7】牛刀小试

下面的几个 cron 表达式 各自是什么意思呢?(下滑查看答案)

(1)0 0 15 1 10 * 1949

(2)0 30 */2 * * ?

(3)1,3,5 0 1-5 L * ?

答案:

(1)1949年10月1日下午3点,开国大典时间(是不是又涨知识了)。

(2)每2小时第30分0秒执行

(3)每个月最后一天的1到5点,然后这几个点内的每个0分1秒,0分3秒,0分5秒各执行一次。

你都答对了吗?答对了都还不右上角大拇指走起 [滑稽] !

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值