Cron表达式
分类:Java 浏览:131 时间:2020-02-24 21:05

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域(* * * * * ? *)。其中的第4个和第6个域比较特殊(day of month day of week),第7个域可以省略(year)。

日(月)日(周)
*****?*

      以上表达式表示每一秒执行一次,Cron表达式可以分为以上7个部分(年可以省略,所以6个部分也行),每个部分的取值如下表所示:

名称是否必须允许的值可以出现的特殊字符
0-59, - * /
0-59, - * /
0-23, - * /
日(月)1-31, - * ? / L W C
0-11 or JAN-DEC, - * /
日(周)1-7 or SUN-SAT, - * ? / L C #
为空或者1970-2099, - * /

      特殊字符中的“C”还没有在实际情况中遇到过,也基本不会用到;与日历关联有关系,本文不做介绍。



一、可以通用的特殊字符,- * / 这4个字符可以出现在任何一个部分


1、逗号,

      逗号表示指定多个时间


5,6,7 * * 10,12 * ? *在每月10号和12号每分钟的第5、6、7秒执行
* 30,45 * * * ? * 在第30分钟和第45分钟的每秒执行
0 0 12 ? * SUN,MON *在星期天和星期一的12点0分0秒执行



2、减号-

      减号表示一个时间范围


5-10 * * 10-12 * ? *在每月10号到12号每分钟的第5-10秒执行
* 30-45 * * * ? * 在30分钟到45分钟之间每秒执行
0 0 * ? * 1-4 *在星期天到星期三的整点执行(星期天是星期的开始)



3、星号*

      星号表示所有允许的值都执行,即等价与逗号分割所有允许都值

* * * * * ? *每一秒执行一次
* * * 15 * ? * 在每月15号都每一秒都执行
0 * 12 ? * MON *在星期一的12点每分钟执行一次


4、斜杆/

      斜杆表示从第几(秒分时日月年)开始,每隔几(秒分时日月年)执行一次

5/10 * * * * ? *每分钟的第5秒开始每隔10秒执行一次(第5秒也会执行)
0 30/5 * 20 * ? * 在每月20号的每个小时,第30分钟开始每隔5分钟执行一次
0 0 12/1 * * ? *每天12点开始每隔1小时执行一次


二、关于问号“?”,看完上面的通用特殊字符,肯定对出现对问号“?”产生了疑惑

      问号只能出现在第4个区域第6个区域,即按月表示的天(day of month)和按周表示的天(day of week),记住这个规则即可如果day of month 出现了“?” 那day of week就一定不能是“?”,反之亦然。“?”在整个表达式中至少出现一次,有且仅能出现一次,通俗的说就是天你是要按照月计算还是按照周计算。


掌握上面的内容基本就在实际中就够用了,但是程序员都是为了追求完美的。


三、Day of month 中的 L W


1、L 每月的最后一天

      理解起来很简单:月份的天数不一致有的31天,有的30天还有闰年和平年的2月份。

      * * * L * ? *  每月的最后一天每秒都执行

      * * * L-5 * ? * 月底前五天每秒都执行


2、W 工作日的意思

     LW表示每月的最后一个工作日(星期五):* * * LW * ? *

     5W表示离5号最近的工作日:* * * 5W * ? *


四、Day of week 中的 L #


1、L 每月最后一个星期几

    * * * ? * 4L * 表示每月的最后一个星期三


2、# 在每月的第几个星期几(一个月不会超过5个星期)

    * * * ? * 1#3 * 表示第3个星期天


五、实用例子,我以前也是直接看别人文章的这个部分



表达式含义
0 0 12 * * ?每天的12点执行
0 15 10 ? * *每天的10点15分执行
0 15 10 * * ?也是每天的10天15分执行
0 15 10 * * ? *还是每天的10点15分执行
0 15 10 * * ? 20202020年的每天的10点15分执行
0 * 14 * * ?每天14点的每分钟执行
0 0/5 14 * * ?每天的14点开始,14点55分结束每隔5分钟执行一次
0 0/5 14,18 * * ?每天的14点开始,14点55分结束每隔5分钟执行一次,以及每天的18点开始,18点55分结束每隔5分钟执行一次
0 0-5 14 * * ?每天的14点0分到14点5分钟之间每分钟执行一次
0 10,44 14 ? 3 WED3月份每个星期三的14点10分和14点44分执行
0 15 10 ? * MON-FRI星期一到星期五的10点15分执行
0 15 10 15 * ?每月15号的10点15分执行
0 15 10 L * ?每月最后一天的10点15分执行
0 15 10 ? * 6L每月最后一个星期五的10点15分执行
0 15 10 ? * 6L 2020-20252002年到2005年的每月最后一个星期五的10点15分执行
0 15 10 ? * 6#3每月第三个星期五的10点15分执行
0 0 12 1/5 * ?每月1号开始每隔5天的12点执行
0 12 12 12 12 ?12月的12号的12点12分执行


在线Cron表达式生成器



Cron Quartz