首页 > 其他分享 >定时任务的cron表达式

定时任务的cron表达式

时间:2022-09-20 14:01:01浏览次数:79  
标签:星期 触发 cron 表示 定时 Minutes 表达式

前言

对于开发人员来说,在做项目的过程中或多或少都会用到定时任务,Java开发一般会用Spring Quartz、xxl-job、Elastic-job来做定时任务调度框架。不论使用哪种框架,定时任务表达式都是必不可少的。

平时配置cron表达式,基本上都是把别人写好的表达式样例复制过来修修改改就好了。当然现在也有许多网站提供了在线生成cron表达式的功能,我们只要按照规则填写就可以轻松的得到cron表达式。但是作为一个合格的开发人员来说,掌握基本的cron表达式原理还是很有必要的。即使定时任务没有按预期去调度执行,也能快速的定位到问题所在。

cron表达式

我们就从一个简单的cron表达式例子开始,cron = 0 0 2 * * ? ,这个表达式的含义是每天凌晨两点执行一次任务。可以看到cron表达式是一个字符串,以5或者6个空格隔开(示例中是被5个空格隔开)。字符串被切割为6个或者7个域,每个域都代表不同的含义。从左到右依次为"秒 分 时 日 月 星期几 年" ,其中年不是必须的的,所以cron表达式有两种形式:

{Seconds} {Minutes} {Hours} {DayofMonth} {Month} {DayofWeek} {Year}或
{Seconds} {Minutes} {Hours} {DayofMonth} {Month} {DayofWeek}

各个域的含义如下:

每个域都可以用数字表示,但是还可以出现如下特殊字符。

  • * : 表示匹配该域的任意值。比如Minutes域使用*,就表示每分钟都会触发。
  • - : 表示范围。比如Minutes域使用 10-20,就表示从10分钟到20分钟每分钟都会触发一次。
  • , : 表示列出枚举值。比如Minutes域使用1,3,就表示1分钟和3分钟都会触发一次。
  • / : 表示间隔时间触发(开始时间/时间间隔)。例如在Minutes域使用 5/10,就表示从第5分钟开始,每隔10分钟触发一次。
  • ? : 表示不指定值。简单理解就是忽略该字段的值,直接根据另一个字段的值触发执行。
  • # : 表示该月第n个星期x(x#n),仅用星期域。如:星期:6#3,表示该月的第三个星期五。
  • L : 表示最后,是单词"last"的缩写(最后一天或最后一个星期几);仅出现在日和星期的域中。用在日则表示该月的最后一天,用在星期则表示该月的最后一个星期。如:星期域上的值为5L,则表示该月最后一个星期的星期四。在使用'L'时,不要指定列表','或范围'-',否则易导致出现意料之外的结果。
  • W: 仅用在日的域中,表示距离当月给定日期最近的工作日(周一到周五),是单词"weekday"的缩写。

比如:"4W"表示距离4号最近的工作日(当月的)触发;

(1)当4号就是工作日时,则表示当天触发;当4号为周六时,则表示3号(周五)触发;

(2)当4号为周日时,则表示在5号(周一)触发;

比如:"1W"表示距离1号最近的工作日触发事件,但是,该工作日只算当月的。假如当月1号是周六,则"1W"表示在当月3号(周一)触发。就算上个月的最后一天是工作日,也不会触发。

  • LW: ‘L’和'W'可以一起组合在日字段使用。表示当月的最后一个工作日触发事件。

取值说明

DayofMonth:

可以用数字1-31 中的任一个值,但要注意一些特别的月份。

Month:

一年中的月份,可以用0-11 或用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示。

DayofWeek:

表示星期几,可以用数字1-7(1=星期日),或者用字符串"SUN, MON, TUE, WED, THU, FRI and SAT"来表示。

常用cron表达式

*/10 * * * * ? 每隔10秒执行一次

0 */5 * * * ? 每隔5分钟执行一次

0 2,22,32 * * * ? 在2分、22分、32分执行一次

0 0 4-8 * * ? 每天4-8点整点执行一次

0 0 2 * * ? 每天凌晨2点执行一次

0 0 2 1 * ? 每月1号凌晨2点执行一次

cron表达式生成器

现在也有许多在线的cron表达式生成器:

https://cron.qqe2.com/

https://www.toolzl.com/tools/croncreate.html

标签:星期,触发,cron,表示,定时,Minutes,表达式
From: https://www.cnblogs.com/pijunqi/p/16710804.html

相关文章

  • JavaScript 正则表达式
    正则表达式:      [email protected]      -正则表达式用于定义一些字符串的规则,        计算机可以根据正则表达式,来检查一......
  • C++中的Lambda表达式
    C++中的Lambda表达式代码如下:[capture](parameters)mutable->return-type{statement}[capture]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处。实际上,[]是Lambd......
  • 正则表达式的掌握
    正则表达式入门指南,看这篇就够了!点击关注......
  • linux定时任务
    Linux添加crontab定时任务首先根据网页提供资料,crontab分为两类,系统crontab,用户crontab。系统crontab可以使不同的用户crontab任务都放到/etc/crontab文件中指定。而用户......
  • 设置Resin服务器定时重启(一次性)
    说明:【】中的内容为需替换成你自己环境下的内容1.新建一个bat后缀的文件,例如restart.bat。restart.bat文件内容为【resin.exe服务器所在的全路径】/resin.exerestart......
  • 基于.NetCore + Quartz.Net + Vue + IView开箱即用的定时任务UI
    基于.NetCore+Quartz.Net+Vue+IView开箱即用的定时任务UI。不依赖数据库,只需在界面做简单配置。地址:https://github.com/cq-panda/Quartz.NetUI ......
  • 22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值
    22张图带你深入剖析前缀、中缀、后缀表达式以及表达式求值一、基本概念在本篇文章当中主要跟大家介绍以下几点前缀、中缀和后缀表达式。如何将中缀表达式转化成后缀表......
  • C++11 -- 匿名函数(lambda 表达式)
    0.一道题目引入关于sb力扣定义外部函数和变量报错这件事最初我定义了一个\(cmp\)函数用来对\(vector\)排序,和一个全局变量\(unordered\_map\)用来记录元素个数......
  • Linux三剑客之一——grep及正则表达式的学习
    1.grep理论1.1grep作用1.2grep参数及说明1.3 基本正则表达式BRE集合1.4 扩展正则表达式ERE集合2.grep实践2.1grep基本参数2.2 grep正则表达式3.总结 1.gr......
  • JAVA Lambda表达式
    JAVALambda表达式函数式在数学中,函数就是有输入量,输出量的一套计算方案,也就是拿数据做操作面向对象思想强调“必须通过对象形式来做事情”函数式思想则尽量忽略......