(备忘)cron表达式的用法
一、结构
cron表达式用于配置cronTrigger的实例,实现任务调度的功能。
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
(每个字段之间最好只留有一个空格(因为spring中貌似在意空格,多个空格会出现错误);字段中的特殊字符区分中英文,必须是中文;Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感)
(1) Seconds Minutes Hours DayofMonth Month DayofWeek Year(秒 分 时 日期 月份 星期 年份)
(2)Seconds Minutes Hours DayofMonth Month DayofWeek(秒 分 时 日期 月份 星期 )
注意:
spring的schedule值支持6个域的表达式,也就是不能设定年,如果超过六个则会报错。
@Scheduled(cron = "0 0/5 * * * ?")
public void s10(){
/* 任务内容*/
}

二、格式说明
|
字段名 |
允许的值 |
允许的特殊符号(仅列部分常用) |
|
Seconds 秒 |
0~59的整数 |
* - , / |
|
Minutes 分 |
0~59的整数 |
* - , / |
|
Hours 时 |
0~23的整数 |
* - , / |
|
DayofMonth 日期 |
1~31的整数(注意每个月的天数) |
* - , / ? L W C |
|
Month 月份 |
1~12的整数或JAN~DEC |
* - , / |
|
DayofWeek 星期 |
1~7的整数或SUN~SAT(1对应SUN) |
* - , / ? L C # |
|
Year 年 |
1970~2099的整数 |
* - , / |
三、特殊字符的含义
(1)星号(*): 表示可以匹配该域的所有值;
例如,"0 0 13 * * ?"表示每天的13点执行一次。
(2)问号(?):只能用在日期和星期中,表示不指定值;
注意事项:
1、它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;
2、当两个子表达式其中一个被指定了值以后,为了避免冲突,需要将另外一个的值设为“?”

3、出现的时候只能出现一次
4、最好是设置表达式必须出现一次该符号,因为在Java(Quartz)中如果没有一次该符号的出现,会提示表达式错误而无法解析

例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,"0 0 5 ? * 3"表示每个周三5点钟执行而无论是几号。
(3)减号(-):表示匹配该域上的一个范围;
例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小时执行一次,"0 1-5 * ? * 1"表示每周日每个小时的1-5分钟每分钟执行一次。
例如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;
(4)逗号(,): 表示枚举值;
例如,"0 0 8,16,23 ? * 1,7"表示每个周六日的8点、16点、23点各执行一次。
(5)斜杠(/):表示起始时间和间隔时间;
x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45分,而5/15在分钟字段中表示5,20,35,50分,你也可以使用*/y,它等同于0/y;
例如,"0 0 3/5 * * ?"表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次
注意:日期、月份、星期中的x是从1开始,不能写成0/3这种的,会出错

(6)井号(#):只能用于星期字段上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;
例如,"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。
(7)L: 只能用于日期和星期字段中,代表“Last”的意思,但它在两个字段中意思不同。
- 在日期中,“L”表示一个月的最后一天,31号、30号、28号或者29号,月份不同日期不同。
- 在星期中中,“L”表示一个星期的最后一天,也就是“7”或者“SAT”,就是星期六。
- 但是如果“L”前有具体内容,它就有其他的含义了。例如:日期中“6L”表示这个月的倒数第六天;星期中“FRIL”表示这个月的最后一个星期五。
注意:在使用“L”参数时,不要指定列表或者范围,这样会出现问题
例如,"0 0 23 L * ?"表示每月最后一天的23点执行,"0 0 23 ? * L"表示每周六的23点执行,"0 0 23 ? * 3L"表示每月最后一个周二的23点执行。
(8)W: 该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日
例如15W表示离该月15号最近的工作日
- 若15号是周六,则15W的结果就是14号
- 若15号是周天,则15W的结果就是16号
- 若15号是周一至周五的某一天,则15W的结果就是15号
注意事项:
- 但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。
- W字符串只能指定单一日期,而不能指定日期范围。
(9)LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;
(10)C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。
(这个字符貌似不常用,不是太明白这个的用法,有大神的话期待解释一下)
如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)
四、一些例子
| 意义 | 表达式 |
| 每隔5秒钟执行一次 | */5 * * * * ? |
| 每半分钟触发任务 | 30 * * * * ? |
| 每隔1分钟执行一次 | 0 */1 * * * ?或者0 * * * * ? |
| 每天1点执行一次 | 0 0 1 * * ? |
| 每月最后一天23点执行一次 | 0 0 23 L * ? |
| 每周六8点执行一次 | 0 0 8 ? * L |
| 每月最后一个周五,每隔2小时执行一次 | 0 0 */2 ? * 6L |
| 每月的第三个星期五上午10:15执行一次 | 0 15 10 ? * 5#3 |
| 在每天下午2点到下午2:05期间的每1分钟执行 | 0 0-5 14 * * ? |
| 表示周一到周五每天上午10:15执行 | 0 15 10 ? * 2-6或者0 15 10 ? * MON-FRI |
| 每个月的最后一个星期五上午10:15执行 | 0 15 10 ? * 6L |
| 每天上午10点,下午2点,4点执行一次 | 0 0 10,14,16 * * ? |
| 朝九晚五工作时间内每半小时执行一次 | 0 0/30 9-17 * * ? |
| 每个星期三中午12点执行一次 | 0 0 12 ? * 4 |
| 每年三月的星期三的下午2:10和2:44各执行一次 | 0 10,44 14 ? 3 4 |
| 每月的第三个星期五上午10:15执行一次 | 0 15 10 ? * 6#3 |
| 每月一日凌晨2点30执行一次 | 0 30 2 1 * ? |
| 每分钟的第10秒与第20秒都会执行 | 10,20 * * * * ? |
| 每月的第2个星期的周5,凌晨执行 | 0 0 0 ? * 6#2 |
| 2002年至2005年的每月的最后一个星期五上午10:15触发 | 0 15 10 ? * 6L 2002-2005 |
| 每个月最后一个工作日的10点15分0秒触发任务 | 0 15 10 LW * ? |
五、一些CRON在线校验工具
http://www.bejson.com/othertools/cronvalidate/
(备忘)cron表达式的用法的更多相关文章
- cron表达式的用法 【比较全面靠谱】
转: cron表达式的用法 cron表达式通过特定的规则指定时间,用于定时任务,本文简单记录它的部分语法和实例,并不完全,能覆盖日常大部分需求. 1. 整体结构 cron表达式是一个字符串,分为6或7 ...
- cron表达式的用法
cron表达式通过特定的规则指定时间,用于定时任务,本文简单记录它的部分语法和实例,并不完全,能覆盖日常大部分需求. 1. 整体结构 cron表达式是一个字符串,分为6或7个域,每两个域之间用空格分隔 ...
- [转]cron表达式的用法
cron表达式通过特定的规则指定时间,用于定时任务,本文简单记录它的部分语法和实例,并不完全,能覆盖日常大部分需求. 1. 整体结构 cron表达式是一个字符串,分为6或7个域,每两个域之间用空格分隔 ...
- Java EE学习——Quartz的Cron表达式
经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比 ...
- Cron表达式备忘
Cron表达式(在Quartz.net里面会用到) 由7段构成:秒 分 时 日 月 星期 年(可选)"-" :表示范围 MON-WED表示星期一到星期三"," ...
- Cheat (tldr, bropages) - Unix命令用法备忘单
cheat 是一个Unix命令行小工具,用来查询一些常用命令的惯用法(我们都知道,man page阅读起来太累了,常常是跳到最后去看 examples,但并不是所有man pages里面都有examp ...
- MFC通过txt查找文件并进行复制-备忘
MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...
- Go cron定时任务的用法
cron是什么 cron的意思就是:计划任务,说白了就是定时任务.我和系统约个时间,你在几点几分几秒或者每隔几分钟跑一个任务(job),就那么简单. cron表达式 cron表达式是一个好东西,这个东 ...
- Quartz.net的cron表达式
写在前面 前面有一篇文章用到了quartz.net,在设置定时时间的时候,使用了cron表达式,这里记录几种常见设置方式,方便对照使用. 详情 在这篇文章:Quartz.Net在windows服务中的 ...
随机推荐
- Python3基础 tuple(list) 改变list元素的内容时,元组的id值不变
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- 运行okvis-mono
./build/okvis_app_synchronous config/config_fpga_p2_euroc1.yaml ../mav0
- python限定方法参数类型、返回值类型、变量类型等
typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...
- server2008r2 安装CentOS
一:安装CentOS 二:配置虚拟网络: 三:设置创建的虚拟机使用刚才创建的网卡: 四:运行CentOs,输入用户:root 密码:root,登录后输入: dhclient 自动获取IP ip ...
- 又一神器框架:linq.js
1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持. ...
- 【Tools】Myeclise-2018.12.0 最新破解文件
Myeclise-2018.12.0 最新破解文件. 最近在写android app登录块,需要用到这个工具,顺手就拿到了,发现资源太少.这里分享给大家. 有币高富帅打赏下载地址: https://d ...
- springmvc中跨域问题
对于web框架中的跨域问题是一个非常普遍的问题,常见的解决方案也有很多,如:jsonp.cros.websocket等.下面是最近处理springmvc中使用cors解决跨域问题的一些总结. Filt ...
- Python MySQLdb 学习总结(转)
转自http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html 感谢@糖拌咸鱼 任何应用都离不开数据,所以在学习python的时候,当然也 ...
- kube-proxy运行机制分析【转载】
转自:http://blog.itpub.net/28624388/viewspace-2155433/ 1.Service在很多情况下只是一个概念,而真正将Service的作用实现的是kube-pr ...
- Spring中的AOP实现思路
AOP是面向切面编程,为什么在切面中写一个注解方法@Before,这个方法会在目标方法前面执行呢 基于JDK动态代理实现上面说的情况 自定义注解 @Target({ ElementType.METHO ...