Spring定时器 Cron表达式的用法

前言

Cron表达式是一种用于描述定时任务执行时间的字符串格式,这种表达式基于时间字段来定义任务应该在哪些时间点执行,通常包含六个或七个用空格隔开的字段,分别代表秒、分钟、小时、日期、月份和星期(年份是可选的)。

每个字段都可以是数字、星号、逗号、减号、正斜杠和问号等特殊字符的组合。星号代表匹配任意值,逗号用于列举值,减号表示值范围,正斜杠表示步长,问号用于日期和星期字段作为占位符。例如,一个Cron表达式 "0 0 12 ? * WED" 表示每星期三的中午12:00执行任务。

SUN-SAT(周中天)  :1-7(1 = 星期日) 和 SUN, MON, TUE, WED, THU, FRI, SAT

JAN-DEC(月)  :1-12 和 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC

一、语法结构

Cron表达式的基本语法可以表示为{秒数} {分钟} {小时} {日期} {月份} {星期} {年份}(年份可为空)。具体来说:

秒数:0~59之间的整数,用于指定分钟内的具体秒数。
分钟:0~59之间的整数,用于指定小时内的具体分钟数。
小时:0~23之间的整数,用于指定一天中的具体小时数。
日期:1~31之间的整数,用于指定每月中的具体日期。
月份:1~12之间的整数,用于指定具体月份。
星期:0(代表周日)~7(代表周一),用于指定具体星期数。

二、特殊字符

  • ?字符: 表示不确定的一个值,即任意一个合法值, 如每月的8号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 8 * ?。
  • ,字符: 表示数个值,即枚举,如在分域中定义8,12,35, 表示分别在第8分,第12分 第35分执行该定时任务。
  • -字符: 表示连续的范围,如在时域中定义20-22,表示在20,21,22点每小时触发一次。
  • *字符: 表示所有值,可解读为 “每”, 如在分域中定义*,表示每分钟都会触发任务,在日域中定义*,表示每天触发任务。
  • /字符: 表示指定一个值的增加幅度。n/m表示从n开始,每次增加m, 如在 秒上定义5/10 表示从 第 5 秒开始 每 10 秒执行一次。
  • #字符: 表示表示每月的第几个周几,只能作用于周上。例如2#3表示在每月的第三个周二。
  • L字符: 表示表示英文中的LAST 的意思,只能在 日和周中使用, 其中,在日中设置表示当月的最后一天,在周中设置表示周六,相当于7或SAT
  • W字符: 表示离给定日期最近的工作日(周一到周五), 只能在日中使用且只能用在具体的数字之后. 如在日上置15W,表示离每月15号最近的那个工作日触发。假如15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果是1W就只能往本月的下一个最近的工作日推不能跨月往上一个月推。

三、常用cron表达式例子

[A秒] [B分] [C时] [D日] [E月] [F星期] [G年]0 0 10,14,16 * * ?  每天上午10点,下午2点,4点0 0 12 ? * WED  表示每个星期三中午12点0 0 12 * * ?  每天中午12点触发0 15 10 ? * *  每天上午10:15触发0 15 10 * * ?  每天上午10:15触发0 15 10 * * ? 2022  2022年的每天上午10:15触发0 * 14 * * ?  在每天下午2点到下午2:59期间的每1分钟触发0 0/5 14 * * ?  在每天下午2点到下午2:55期间的每5分钟触发0 0/5 14,18 * * ?  在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发0 0-5 14 * * ?  在每天下午2点到下午2:05期间的每1分钟触发0 10,44 14 ? 3 WED  每年三月的星期三的下午2:10和2: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 2022-2023  2022年至2023年的每月的最后一个星期五上午10:15触发0 15 10 ? * 6#3  每月的第三个星期五上午10:15触发0 0 23 * * ?  每天23点执行一次0 0 1 * * ?  每天凌晨1点执行一次0 0 1 1 * ?  每月1号凌晨1点执行一次0 0 23 L * ?  每月最后一天23点执行一次0 0 1 ? * L  每周星期天凌晨1点执行一次0 20,35,55 * * * ?  在20分、35分、55分执行一次0 0 0,13,18,21 * * ?  每天的0点、13点、18点、21点都执行一次0/2 * * * * ?   表示每2秒 执行任务0 0/2 * * * ?    表示每2分钟 执行任务0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构最佳实践 -- 相关JAVA架构

1. java 类加载器架构 2. JVM 架构 3. Java 技术体系 4. 线程运行架构 5. Java 体系(编译与运行)结构 6. JMS 技术架构 7. JMX 技术架构 8. Spring 架构 9. Hibernate 架构 10. ibatis 架构 11. Struts2 架构 12. Struts1 架构 13. JBPM 14. EJB 技术架构…

万字总结!Docker简介及底层关键技术剖析

本文首发在个人博客上:万字总结!Docker简介及底层关键技术剖析 Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#x…

滚动条详解:跨平台iOS、Android、小程序滚动条隐藏及自定义样式综合指南

滚动条是用户界面中的图形化组件,用于指示和控制内容区域的可滚动范围。当元素内容超出其视窗边界时,滚动条提供可视化线索,并允许用户通过鼠标滚轮、触屏滑动或直接拖动滑块来浏览未显示部分,实现内容的上下或左右滚动。它在保持…

补档 -- 测试的分类(1)

最近有很多人私信我说: 灰灰你什么时候写测试分类阿, 本来我要开始肝性能测试的, 我一看, 奥, 之前摸鱼忘写了, 所以这里补档(叶问指着一边笑.jpg). 总览 标红的需要注意一下. 为什么要对软件测试进行分类? 软件测试是软件生命周期的一个重要环节, 具有较高的复杂性, 对于软…

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 🌵hoare版本 🌵挖坑法 ​编辑 🌵前后指针版本 ​编辑 3.2 快速排序优化 🌻三数取中法选key 3.4 快速排序…

如何在群晖NAS部署office系统办公服务并实现无公网IP远程编辑文件

文章目录 本教程解决的问题是:1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是: 1.Word,PPT,Excel等重要文件存在本地环境,如何在编…

Umi.js:登录之后需要手动刷新权限菜单才能渲染

在使用Umi.js开发后台管理页面时,用户登录之后,总是需要手动刷新一次页面,才能够拿到全局状态/权限信息。 问题描述 结合使用umi/plugin-layout和umi/plugin-access,登录进入页面,配置的权限菜单未渲染,需…

javaWeb项目-大药房管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Java语言简介 Ja…

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 一、检查服务是否开启 找到 【Docker Desktop Service】,然后,启动他; 你也可以直接设置为“自动” 找到服务,右键》属性》启动类型:自动》点击…

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xf…

三、Flask模型基础

ORM 创建模型 # exts.py:插件管理 # 扩展的第三方插件 # 1.导入第三方插件 from flask_sqlalchemy import SQLAlchemy # ORM插件 from flask_migrate import Migrate # 2. 初始化 db = SQLAlchemy() # ORM migrate = Migrate() # 数据迁移 # 3. 和app对象绑定 def init_ex…

kafka实验部署

一、前期准备 二、kafka实验 在zookeeper后继续进行操作 2.1 为ndoe1、node2、node3作出部署 2.1.1 解压kafka压缩包(node1举例) 2.1.2 操作 将解压后的kafka移动到kafka,进入到kafka下的config中,复制文件 2.1.2.1 编辑server.pr…

【笔试训练】day7

1.在字符串中找出连续最长的数字串 思路&#xff1a; 简单双指针&#xff0c;随便怎么暴力 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;int main() {string str;cin >> str;int ans …

聚道云软件连接器助力医疗器械有限公司打通金蝶云星辰与飞书

摘要 聚道云软件连接器成功将金蝶云星辰与飞书实现无缝对接&#xff0c;为某医疗器械有限公司解决采购订单、付款单同步、审批结果回传、报错推送等难题&#xff0c;实现数字化转型升级。 客户介绍 某医疗器械有限公司是一家集研发、生产、销售为一体的综合性医疗器械企业。…

【linux运维】系统常见管理命令

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了学习基本的shell编程和linux命令&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于b站大学——linux运维课程进行的&#xff0c;…

安装多个MySQL版本时如何连接到不同的数据库

当安装多个版本的数据库时&#xff0c;不同版本的端口名不一样&#xff0c;可以使用以下命令进行连接 mysql -uroot -p数据库密码 -h主机名 -P端口号 数据库主机名默认是localhost&#xff0c;端口号默认是3306&#xff0c;当安装多个版本数据库时&#xff0c;需要记住数据库的…

【多线程】CAS的应用 | CAS的概念 | 实现原子类 | 实现自旋锁

文章目录 一、CAS1.什么是CAS2.实现原子类3.实现自旋锁 一、CAS 1.什么是CAS Compare and swap 比较并交换。 比较交换的是 内存 和 寄存器 比如此时有一个内存 : M。 还有两个寄存器A,B ​ CAS ( M , A , B ) :如果M和A的值相同的话&#xff0c;就把M和B的值进行交换(交换的…

排序之插入排序:从斗地主到插入排序

目录 1.斗地主如何摸牌 2.从摸牌想到插入排序 3.完成插入排序 4.结束语 1.斗地主如何摸牌 不知道各位是否玩过几乎人人都玩过的斗地主游戏呢&#xff1f;相必各位或多或少都玩过一点&#xff0c;再没玩过也看别人打过。今天博主就将从这个游戏为大家讲解我们的插入排序。 在…

React vs Vue.js:两种流行框架背后的设计哲学差异

Vue.js 和 React 虽然都是流行的前端框架,但在设计哲学上有一些显著差异。这些差异源自它们不同的设计目标和出发点。 vue.js Vue.js 的核心设计原则是"渐进式"。它旨在尽可能降低学习成本和入门门槛,并与其他库和项目保持良好的整合性。Vue 的设计注重简单性和直观…

C语言堆区内存管理

一、C语言编译的内存分配 二、堆区空间的分配 1、malloc函数 功能&#xff1a;从堆区分配内存 #include <stdlib.h> void *malloc(unsigned int size)//size 分配内存的字节数2、free函数 功能&#xff1a;释放内存 #include <stdlib.h> void free(void *ptr)…