Cron表达式及其使用注意事项
Cron表达式简介
Cron表达式全程Crontab表达式,是描述Crontab定时任务执行周期的一种语法格式。而Cron表达式严格上来说有许多特别的版本。如:Linux的、Spring的、Quartz框架等表达式,虽说它们总体上来说一类似的,但总会有一些语法的差异在里面。而本文要介绍的是基于Quartz 的Cron表达式。
Cron表达式的语法
HelloWord入门
首先,通过一个例子来引入这个话题:如果你设计了一个程序,想要在2020年的1月2号3点4分5秒对你喜欢的人发一句话。那么,使用Cron表达式改如何配置?需要注意的是,这里的符号都是英文的标点符号,而其中问号和是比较难区分的一个。中文:?英文:? 配置如下所示:
5 4 3 2 1 ? 2020 。通过这个表达式就可以猜出每个位置代表的是什么意思了。细节如下图所示:

Cron数值范围通用配置
顾名思义,数值范围通用的配置在语法上是非常类似的,仅仅是数值的范围不同而已,所以这里统一进行讲解。首先,时分秒数值范围那必定是:0-23时、0-59分、0-59秒,月份和年份也以此类推。而较为特殊的如:Day of month(第几号)、Day of week(星期几)这两个字段,可以使用数字和英文中的单词缩写来表示。需要注意的是,当你使用数字用于表达星期几的时候,0代表的是星期日 ,这其实和外国人的日历习惯有关。所以,当要配置Day of week这个字段的时候,推荐使用英文代替。
Cron的特殊字符配置
'*' :代表任意的数值都可以满足。需要注意的是:这里的*指的是任意,如果放入seconds这个字段,则代表每一秒都符合。在业务中,我在配置一个定时任务的时候误以为它是默认为0的意思,差点就出了生产事故。
',':逗号表示一个字段内可以有多个值,但它并不表示一个范围。例如,“MON,WED,FRI”在Day of week域中,表示“星期一,星期三和星期五”。
'-':这个符号则是真正的表达一个范围。其中范围的开始和结束是从左往右读取的,例如:在Hours字段中,“9-14”的意思就是从9点到下午14点的意思。
'?' :从上面的图片可以看出,问号只存在于 Day of month、Day of week中,它出现所代表的意思就是本字段没有指定值。例如:有一个程序只在乎今天是星期几并不在乎今天是几号,那么就可以在Day of month加入“?”这个符号。需要注意的是:Day of month、Day of week两个字段不能同时出现“?”这个符号。同时,也不能两个字段都没有“?”这个符号。意思是:两个字段是互斥的。
’L‘:L这个字符的意思是Last(最后)的意思,它同样只存在于 Day of month、Day of week中。用于表示:每个月的最后一天,每个星期的最后一天。需要注意的是:Day of week中的L代表的是星期六,并不是星期日 。当然,Day of week可以配合数字来使用,如:6L表示本月最后一个星期天。
’W’:只能在“day of month”。指定最接近给定日期的工作日(星期一-星期五)。例如,15W,意思是:“最接近该月15日的工作日。”;所以,如果15号是星期六,触发器在14号星期五触发。如果15日是星期天,触发器在16日星期一触发。如果15号是星期二,那么它在15号星期二触发。1W,如果这个月的第一天是星期六,不会跨到上个月,触发器会在这个月的第三天(也就是星期一)触发。只有指定一天(不能是范围或列表)的时候,才能指定“W”字符。注:可以同时使用LW,用于表示本月的最后一个工作日。
‘#’:只有Day of week可以使用,具体的形式如:sun#3,表示为本月的第3个星期日。符号“#”后面的数值范围为1-5之间。
'/':该符号所有字段都能使用,表示一个增量的过程。如在seconds这个字段配置0/15,表示每隔15s会就会满足一次条件。
Cron表达式实战小练习
0 15 10 ? * * |
每天上午10:15执行任务 |
|---|---|
0 15 10 * * ? |
每天上午10:15执行任务 |
0 0 12 * * ? |
每天中午12:00执行任务 |
0 0 10,14,16 * * ? |
每天上午10:00点、下午14:00以及下午16:00执行任务 |
0 0/30 9-17 * * ? |
每天上午09:00到下午17:00时间段内每隔半小时执行任务 |
0 * 14 * * ? |
每天下午14:00到下午14:59时间段内每隔1分钟执行任务 |
0 0-5 14 * * ? |
每天下午14:00到下午14:05时间段内每隔1分钟执行任务 |
0 0/5 14 * * ? |
每天下午14:00到下午14:55时间段内每隔5分钟执行任务 |
0 0/5 14,18 * * ? |
每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务 |
0 0 12 ? * WED |
每个星期三中午12:00执行任务 |
0 15 10 15 * ? |
每月15日上午10:15执行任务 |
0 15 10 L * ? |
每月最后一日上午10:15执行任务 |
0 15 10 ? * 6L |
每月最后一个星期五上午10:15执行任务 |
0 15 10 ? * 6#3 |
每月第三个星期五上午10:15执行任务 |
0 10,44 14 ? 3 WED |
每年3月的每个星期三下午14:10到14:44时间段内执行任务 |
Cron表达式及其使用注意事项的更多相关文章
- 【转】Cron表达式详解
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: (1) Seconds Minutes Hours DayofMonth Mo ...
- Cron 表达式
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: (1) Seconds Minutes Hours DayofMonth Mo ...
- Cron表达式简单的介绍
1.Cron是什么,用来做什么的 根据百度百科的解释:计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思.在Linux中,我们经常用到 cron 服务器来完成这项工作.cron服务器可以 ...
- (备忘)cron表达式的用法
一.结构 cron表达式用于配置cronTrigger的实例,实现任务调度的功能. Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格 ...
- Cron表达式 详解
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: (1) 7个域: Seconds Minutes Hours DayofMon ...
- Quartz.Net系列(九):Trigger之CronScheduleBuilder和Cron表达式详解
1.使用 var scheduler =await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); var jo ...
- cron表达式详解(转)
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: (1) Seconds Minutes Hours DayofMonth Mo ...
- quartz.net 时间表达式----- Cron表达式详解
序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...
- 摆脱Spring 定时任务的@Scheduled cron表达式的困扰
一.背景 最近因为需要,需要适用Spring的task定时任务进行跑定时任务,以前也接触过,但是因为懒没有好好地理解@Scheduled的cron表达式,这次便对它做了一个全方位的了解和任务,记录下来 ...
随机推荐
- MATLAB中冒号的用法解析
MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: ...
- IDEA 代码量统计(Statistic)
IDEA 代码量统计(Statistic) 1.1 前言 项目到了一定阶段,都会想要看看项目的代码量情况,这里主要使用插件Statistic进行代码统计查看. 1.2 安装插件步骤 找到插件市场入口并 ...
- java 企业 网站源码 模版 屏幕自适应 有前后台 springmvc SSM 生成静态化
前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问 ...
- 如何修改Tomcat运行时jvm编码
问题: 最近在部署项目的时候出现数据乱码的情况,经过一番查看项目都是用的UTF-8编码格式,数据也是,但是经过调用接口传给对方就乱码了. 由于是部署在Windows环境下,Windows默认编码GBK ...
- Gird(1)
目录 网格布局 grid(1) 实现方式 对容器设置的属性 行高与列宽的设置 单元格的间距 内容的位置 表格在容器的位置 兼容问题 网格布局 grid(1) 实现方式 display:grid 也可成 ...
- Git常用命令 - 随时更新
1. 配置用户信息 git config --global user.name <name> git config --global user.email <email_addres ...
- python3-cookbook笔记:第五章 文件与IO
python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...
- 剑指offer-面试题33-二叉搜索树的后序遍历序列-二叉树遍历
/* 题目: 给定一个序列,判断它是否为某个二叉搜索树的后序遍历. */ /* 思路: 二叉搜索树:左子树<根节点<右子树. 序列的最右端为根节点,小于根节点的左半部分为左子树,大于根节点 ...
- VUE项目编译和打包问题
今天VPN不好使,所以准备看一下VUE前端的代码.因为是乙方新发过来的,所以想着先把代码跑起来.结果发现发过来的代码里没有node_modules. 解决方式 npm install express ...
- Centos 7 配置 NFS
安装NFS包 yum install nfs-utils.x86_64 启动NFS服务需要首先启动rpcbind服务,这个rpcbind包已经在上面安装好了 先配置 /etc/exports 文件 v ...