@Scheduled参数及cron表达式解释

2023-11-20

@Scheduled支持以下8个参数:

  • 1.cron:表达式,指定任务在特定时间执行;
  • 2.fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms;
  • 3.fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;
  • 4.fixedRate:表示按一定的频率执行任务,即每次开始执行的时间间隔一致,参数类型为long,单位ms;
  • 5.fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;
  • 6.initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms;
  • 7.initialDelayString:与initialDelay的含义一样,只是将参数类型变为String;
  • 8.zone:时区,默认为当前时区。
cron表达式是一个字符串,以空格分开共6个域:
  • [秒] [分] [时] [日] [月] [周]
  • spring自带的定时任务cron表达式不支持年

如图:
在这里插入图片描述
上图类中有如下源代码:

private void parse(String expression) throws IllegalArgumentException {
	String[] fields = StringUtils.tokenizeToStringArray(expression, " ");
	if (!areValidCronFields(fields)) {
		throw new IllegalArgumentException(String.format(
				"Cron expression must consist of 6 fields (found %d in \"%s\")", fields.length, expression));
	}
	doParse(fields);
}

private static boolean areValidCronFields(String[] fields) {
	return (fields != null && fields.length == 6);
}

代码中expression参数即cron表达式,所以在spring自带的定时任务中正确的cron表达式只能是6个域,否则会抛出IllegalArgumentException提示:Cron expression must consist of 6 fields(cron表达式必须由6个域组成)。

必填 允许值 允许的通配符
秒(seconds) 0-59整数 , - * /
分(minutes) 0-59整数 , - * /
时(hours) 0-23整数 , - * /
日(daysOfMonth) 1-31整数(需要考虑月的天数) , - * ? / L W
月(months) 1-12整数 或 JAN-DEC , - * /
周 (daysOfWeek) 1-7整数 或 SUN-SAT , - * ? / L #
通配符说明:
  • *:表示匹配该域的任意值。在minutes域使用 * 表示每分钟。在months里表示每个月。在daysOfWeek域表示一周的每一天。
  • ?:只能用在daysofMonthdaysofWeek两个域,表示不指定值,当两个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为 ?。因为daysofMonthdaysofWeek会相互影响。例如想在每月的2号触发调度,不管2号是周几,则只能使用如下写法:0 0 0 2 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管周几都会触发。
  • -:表示范围。例如在minutes域使用5-20,表示从5分到20分钟每分钟触发一次
  • /:表示起始时间开始触发,然后每隔固定时间触发一次。例如在minutes域使用5/20,则意味着从当前小时的第5分钟开每20分钟触发一次。
  • ,:表示列出枚举值。例如:在minutes域使用5,20,则意味着在5分和20分时各触发一次。
  • L:表示最后,是单词“last”的缩写,只能出现在daysofWeekdayofMonth域。在daysofWeek域使用5L意思是在指定月的最后的一个星期四触发。在dayofMonth域使用5L或者FRIL意思是在指定月的倒数第5天触发。在使用L参数时,不要指定列表或范围。
  • W:表示有效工作日(周一到周五),只能出现在daysofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在daysofMonth使用5W,如果5号是周六,则将在最近的工作日周五,即4号触发。如果5号是周日,则在6日(周一)触发。如果5日在星期一到星期五中的一天,则就在5日触发。另外,W的最近寻找不会跨过月份 。
  • LW:这两个字符可以连用,表示指定月的最后一个工作日。
  • #:用于确定每个月第几个周几,只能出现在daysofMonth域。例如在4#2,表示某月的第二个周三。
常用表达式示例:
  • 0/2 * * * * ? 表示每2秒 执行任务
  • 0 0/2 * * * ? 表示每2分钟 执行任务
  • 0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
  • 0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
  • 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
  • 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
  • 0 0 12 ? * WED 表示每个星期三中午12点
  • 0 0 12 * * ? 每天中午12点触发
  • 0 15 10 ? * * 每天上午10:15触发
  • 0 15 10 * * ? 每天上午10:15触发
  • 0 15 10 * * ? 每天上午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-WED,SAT 周一至周三和周六的上午10:15触发
  • 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触发

参考网站:

  • http://www.bejson.com/othertools/cron/
  • https://www.cnblogs.com/javahr/p/8318728.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Scheduled参数及cron表达式解释 的相关文章

  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • 如果目标上的消费者已关闭,则通知 ActiveMQ 生产者

    我正在使用 ActiveMQ 消息代理 并且我有一个要求 即生产者应用程序想要知道在特定目标上使用的消费者应用程序是否已启动 我怎样才能实现这个目标 Thanks 你应该结帐咨询信息 http activemq apache org adv
  • Spring中的ProxyFactoryBean

    有人可以解释一下吗代理工厂Bean http static springsource org spring docs current javadoc api org springframework aop framework ProxyFa
  • 如何通过基本身份验证确保 Spring Cloud Eureka 服务的安全?

    我在同一主机上设置了多个尤里卡服务器实例 他们使用主机名 eureka primary secondary 和 tertiary 这些主机名在主机文件中定义为 localhost 别名 一切都工作正常 它们都是可见的 并且可以作为不同的实例
  • 用于层次结构树角色的 Spring Security / Java EE 解决方案

    我知道 Spring Security 非常适合标准角色和基于权限的授权 我不确定的是这种情况 系统中管理着 10 000 名员工 员工被组织成组织结构图 跨部门的谁向谁报告的树 其中一些员工是用户 这些用户仅被允许访问其职责范围内的员工
  • 属性文件中的特殊字符

    在我的 Java Spring Web 应用程序中 我在打印从属性文件检索的意大利语特殊字符 等 时遇到问题 我找到了这篇文章http docs oracle com cd E26180 01 Platform 94 ATGProgGuid
  • 多线程Spring-boot控制器方法

    因此 我的应用程序 spring boot 运行速度非常慢 因为它使用 Selenium 来抓取数据 处理数据并显示在主页中 我遇到了多线程 我认为它对我的应用程序很有用 可以让它运行得更快 但是教程似乎显示在带有 main c 的普通 j
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 身份验证在 Spring Boot 1.5.2 和 Oauth2 中不起作用

    我正在使用带有 spring boot 1 5 2 RELEASE 的 Oauth2 当我尝试重写 ResourceServerConfigurerAdapter 类的配置方法时 它给了我一个编译错误 但这在 Spring boot 1 2
  • Spring 规范 - 谓词的联合

    我需要一个函数来过滤参数并构建查询 我有 4 个参数 因此如果我尝试为每个条件实现查询 我将不得不编写 16 2 4 实施 这不是一个好主意 我尝试通过界面改进我的代码Specification来自 Spring Data JPA 但我无法
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • bean 范围的真实用例

    我正在学习 Spring 我了解了 bean 范围 它们每个的真实世界用例是什么 我无法获得任何帮助 请帮助何时在 Spring 中使用 Singleton Prototype Request 和 Session 作用域 辛格尔顿 它为每个
  • 如何限制使用 Spring-Boot 和 OAuth2 登录特定域

    我已经使用 Spring Boot 和 Google 成功完成了 OAuth2 登录 但我想将登录限制到特定域 我们正在使用 Google Apps for Work 我认为我应该通过扩展类 OAuth2ClientAuthenticati
  • 如何在 Spring 环境中更改属性?

    我在应用程序中使用 spring 环境 Bean 来获取应用程序配置属性 我想在不重新启动应用程序服务器的情况下从java代码更改spring环境中的属性值 我怎样才能做到这一点 Service public void MyService
  • 如何按角色限制对 Spring Data REST 投影的访问?

    在使用 Spring Data JPA 和 Spring Data REST 的应用程序中 假设您有一个如下所示的实体类 Entity public class Person Id GeneratedValue private int id
  • 如何使用 Spring 将 HSQLDB 嵌入到 Web 应用程序的文件中

    我有一个带有Spring的web应用程序 当我在服务器模式下使用HSQLDB时它可以正常工作 但在文件模式下 它只通过了单元测试 这是我的数据源
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav

随机推荐

  • redis之expire命令详解

    expire是设置redis过期时间的命令 需要注意的点有以下几点 expire设置过期时间的单位是秒 如设置name的过期时间为1000秒 expire name 1000 超过时间后会自动删除key 但是不一定是立即删除 因为redis
  • el-select下拉弹窗样式修改

    首先在el select上定义 popper class eloption 和 popper append to body true 使用方法如下面代码段
  • CAN总线隔离器简介

    简介 LCAN OptoAdapter是一款通用插入式电隔离适配器 完全的硬件逻辑设计 可安装在CAN网络的任何位置 快速实现CAN网络之间电隔离 独有的CAN信号调理技术 可以实现改变CAN网络拓扑结构 长支线 增加节点数目等功能 独有的
  • Qt之Q_GLOBAL_STATIC创建全局静态对象

    概述 所谓的全局静态对象 大多是在单例类中所见 之前写过一篇文章介绍如何实现一个单例类 在这里 这是最常见的方式来进行创建 需要自定义 static 类对象 并进行手动初始化 而今天要说的是更简单的方式来实现 Qt 提供了一个非常方便的宏Q
  • Android Bootchart使用

    目录 1 bootchart简介 2 bootchart 在 android 平台的使用步骤 复杂方式 old 3 bootchart 在 android 平台的使用步骤 方便方式 new 4 修改bootchart抓取的停止时间 5 可能
  • 树莓派4串口配置及使用

    文章目录 改变串口的功能 使能串口 重启树莓派 安装minicom 使用minicom通信 编写连接树莓派的代码 打开串口代码 配置串口代码 关闭串口代码 读写串口 改变串口的功能 sudo nano boot cmdline txt 删除
  • intellij-idea每次都需要source bash_profile

    windows用户 为了提高效率我们在 bash profile文件中配置了简写命令 然后我们在JetBrains产品中使用的terminnal终端是git bash 发现每次重新启动JetBrains后都需要执行一下 source bas
  • Unity3D:按键生成物件,Instantia…

    在按下按键之后 可以在画面中生成之前定义好了的物体 这里使用了Instantiate函数来生成 1 先在游戏中定一个空物件GameObject 创建空物件快捷键 ctrl shift n 2 在视图中放置 3 编写脚本 脚本 SpaceCh
  • Ubuntu设置共享文件夹(解决/mnt 目录下没有 hgfs 目录)

    目录 1 Windows创建一个共享文件夹 2 在虚拟机的设置中选择Windows下的共享文件夹 3 在Ubuntu中查看共享文件夹 4 解决 mnt 目录下没有 hgfs 目录 5 设置共享文件夹以后 mnt hgfs下没有出现共享文件夹
  • 2022 ICML 论文合集(附Code和数据集)

    1 Sharp MAML Sharpness Aware Model Agnostic Meta Learning Task 元学习 代码链接 https github com mominabbass sharp maml 数据集 http
  • 链表常见题总结一

    链表可以说是笔试面试的重点 因为写一个链表相关的题可以在短时间写出来 并且考验测试人的水平 特别将平时经常做的链表的题拿上来 做个小结 1 求单链表中结点的个数 2 将单链表反转 3 查找单链表中的倒数第K个结点 k gt 0 4 查找单链
  • 【C语言】进制输出加上前缀

    对于八进制数字 它没法和十进制 十六进制区分 因为八进制 十进制和十六进制都包含 0 7 这几个数字 对于十进制数字 它没法和十六进制区分 因为十六进制也包含 0 9 这几个数字 如果十进制数字中还不包含 8 和 9 那么也不能和八进制区分
  • Fiddler抓去HTTP/HTTPS数据包

    默认情况下 Fiddler是抓不到Java程序的HTTP HTTPS的通信的 1 配置抓取HTTP HTTPS通信 只要为Java程序设置HTTP代理 指向localhost 8888即可 方法一 使用如下方式启动Java程序 java D
  • HTML 教程- (HTML5 标准)

    HTML 教程 HTML5 标准 超文本标记语言 英语 HyperText Markup Language 简称 HTML 是一种用于创建网页的标准标记语言 您可以使用 HTML 来建立自己的 WEB 站点 HTML 运行在浏览器上 由浏览
  • Angular_组件间通讯

    组件间通讯 1 组件间通讯 父组件向子组件输入属性用 Input amount number 2 组件输出属性 1 在发射的组件内部定义发射的EventEmitter对象 Output lastPrice EventEmitter
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y
  • CentOS和CentOS Stream的区别你知道吗?

    CentOS 8生命周期的结束 2020年年底的时候 红帽宣布CentOS 8将在一年后结束生命周期 当时这个消息在开发者圈子炸了锅 很多人以为CentOS要自此消失了 实际情况是CentOS并没有消失 只是名字更换为了CentOS Str
  • Spring Cloud Alibaba、Spring Cloud 版本升级、版本号对应情况和一些注意事项等

    参考文档 优质博客 https blog csdn net Thinkingcao article details 105652632 Spring官方文档 https spring io SpringCloud官方文档 https spr
  • 小米无线蓝牙耳机Air2 SE如何连接MacPro

    若设备可以搜索到小米真无线蓝牙耳机Air2 SE但无法配对 建议您 1 若设备连接了WiFi 2 4Ghz 由于蓝牙和WiFi共用天线 且工作在相同的频段 故当WiFi传输数据量较大时 蓝牙会受到干扰 建议关闭WiFi后再尝试配对 2 将左
  • @Scheduled参数及cron表达式解释

    Scheduled支持以下8个参数 1 cron 表达式 指定任务在特定时间执行 2 fixedDelay 表示上一次任务执行完成后多久再次执行 参数类型为long 单位ms 3 fixedDelayString 与fixedDelay含义