@Scheduled注解各参数详解

@Scheduled注解的使用这里不详细说明,直接对8个参数进行讲解。

cron

该参数接收一个 cron表达式cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义。

[秒] [分] [小时] [日] [月] [周] [年]

注:[年]不是必须的域,可以省略[年],则一共6个域

序号 说明 必填 允许填写的值 允许的通配符 1 秒 是 0-59 , – * / 2 分 是 0-59 , – * / 3 时 是 0-23 , – * / 4 日 是 1-31 , – * ? / L W 5 月 是 1-12 / JAN-DEC , – * / 6 周 是 1-7 or SUN-SAT , – * ? / L # 7 年 否 1970-2099 , – * /

  • * :表示所有值。 例如:在分的字段上设置 *,表示每一分钟都会触发。
  • ? :表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为 ? 具体设置为 0 0 0 10 * ?
  • - :表示区间。例如 在小时上设置 10-12,表示 10,11,12点都会触发。
  • , :表示指定多个值,例如在周字段上设置 MON,WED,FRI 表示周一,周三和周五触发
  • / :用于递增触发。如在秒上面设置 5/15 表示从5秒开始,每增15秒触发(5,20,35,50)。 在日字段上设置 1/3所示每月1号开始,每隔三天触发一次。
  • L :表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年 [leap]), 在周字段上表示星期六,相当于 7SAT。如果在 L前加上数字,则表示该数据的最后一个。例如在周字段上设置 6L这样的格式,则表示”本月最后一个星期五”
  • W :表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上置 15W,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发。如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 1W,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注, W前只能设置具体的数字,不允许区间 -)。
  • # :序号(表示每月的第几个周几),例如在周字段上设置 6#3表示在每月的第三个周六。注意如果指定 #5,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;小提示: LW可以一组合使用。如果在日字段上设置 LW,则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是不区分大小写的,即 MONmon相同。

每隔5秒执行一次: */5 * * * * ?

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

每天23点执行一次: 0 0 23 * * ?

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

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

每月最后一天23点执行一次: 0 0 23 L * ?

每周星期六凌晨1点实行一次: 0 0 1 ? * L

在26分、29分、33分执行一次: 0 26,29,33 * * * ?

每天的0点、13点、18点、21点都执行一次: 0 0 0,13,18,21 * * ?

另外, cron属性接收的 cron表达式支持占位符。如:

配置文件:

time:
  cron: */5 * * * * *
  interval: 5

每5秒执行一次:

@Scheduled(cron="${time.cron}")
void testPlaceholder1() {
    System.out.println("Execute at " + System.currentTimeMillis());
}

@Scheduled(cron="*/${time.interval} * * * * *")
void testPlaceholder2() {
    System.out.println("Execute at " + System.currentTimeMillis());
}

zone

时区,接收一个 **java.util.TimeZone#ID**cron表达式会基于该时区解析。

默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区 Asia/Shanghai。该字段我们一般留空。

fixedDelay

上一次执行完毕时间点之后多长时间再执行。如:

@Scheduled(fixedDelay = 5000) //上一次执行完毕时间点之后5秒再执行

fixedDelayString

fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

@Scheduled(fixedDelayString = "5000") //上一次执行完毕时间点之后5秒再执行

占位符的使用(配置文件中有配置: time.fixedDelay=5000

 @Scheduled(fixedDelayString = "${time.fixedDelay}")
 void testFixedDelayString() {
     System.out.println("Execute at " + System.currentTimeMillis());
 }

fixedRate

上一次开始执行时间点之后多长时间再执行。如:

@Scheduled(fixedRate = 5000) //上一次开始执行时间点之后5秒再执行

fixedRateString

fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

initialDelay

第一次延迟多长时间后再执行。如:

@Scheduled(initialDelay=1000, fixedRate=5000) //第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次

initialDelayString

initialDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

Original: https://www.cnblogs.com/Kylin-lawliet/p/15007067.html
Author: 黑猫的黑猫黑猫
Title: @Scheduled注解各参数详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593603/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 部署-docker推送镜像到远程仓库

    docker推送镜像到远程仓库 如果我们想将这个镜像提供给别人使用时,我们可以将镜像推送到远程仓库,然后别人从远程仓库中下载即可, 提交更改 在镜像的运行过程中,我们对镜像进行了修…

    Java 2023年6月7日
    084
  • VS2017 打开WebService 提示已经在解决方案中打开了具有该名称的项目

    .net开发。用VS2017工具,打开VS2010创建的WebSevice工程时,提示工程不可用。 重新加载后提示:已经在解决方案中打开了具有该名称的项目。 该问题原因是因为启用了…

    Java 2023年6月8日
    064
  • spring cloud alibaba 组件版本关系 以及 毕业版本依赖关系

    Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ VersionDubbo VersionSeat…

    Java 2023年6月7日
    060
  • 微服务SpringCloud之GateWay路由

    在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway。Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长…

    Java 2023年5月30日
    068
  • 分布事务和分布式锁

    分布式事务 1 两阶段提交 二阶段提交协议(Two-phase Commit,即 2PC)是常用的分布式事务解决方案,即将事务的提交过程分为两个阶段来进行处理:准备阶段和提交阶段 …

    Java 2023年6月5日
    079
  • Linux安装开发软件

    安装MySQL首先查看本机是否已经安装 若发现,则将其删除: 查看yum源是否有mysql安装包 选择三个安装:mysql,mysql-server,mysql-devel安装: …

    Java 2023年6月8日
    087
  • Spring Tool 历史版本下载

    参考资料 说在前面 历史版本下载 规律 参考资料 Spring Tool Suit3下载地址 说在前面 官方目前只提供最新版本的 Spring Tool 4下载,并没有提供历史版本…

    Java 2023年6月9日
    074
  • 阿里面试:MySQL如何设计索引更高效?

    数据库系列更新到现在我想大家对所有的概念都已有个大概认识了,这周我在看评论的时候我发现有个网友的提问我觉得很有意思:帅丙如何设计一个索引?你们都是怎么设计索引的?怎么设计更高效? …

    Java 2023年6月9日
    062
  • IDEA+Git

    IDEA+Git 配置Git 创建git本地库 IDEA提交本地库 3.1. 添加进缓存区 – 文件由红变绿 3.2. 提交到本地库 * 文件名由绿变黑 3.3. 切换…

    Java 2023年6月5日
    070
  • 浅谈kali : aircrack-ng套件

    aircrack-ng 套件包含有: Name Description aircrack-ng 破解WEP以及WPA(字典攻击)密钥 airdecap-ng airmon-ng 将…

    Java 2023年6月7日
    058
  • Kafka 主题解析

    一、主题管理 使⽤ kafka-topics.sh脚本时可用的配置: 选项 说明 –config cleanup.policy compression.type del…

    Java 2023年6月5日
    061
  • Effective Java 第三版——80. EXECUTORS, TASKS, STREAMS 优于线程

    Tips书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code注意,书中的有些代码里方法是基于Java 9…

    Java 2023年5月29日
    068
  • Java Hutool 包工具类推荐 ExcelUtil

    hutool包版本号可根据实际情况更换 <dependency> <groupid>cn.hutool</groupid> <artifa…

    Java 2023年6月15日
    070
  • Django基础学习之Cookie 和 Sessions 应用

    在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX…

    Java 2023年5月29日
    048
  • git代码上传idea配置“.gitignore”文件

    **/mvnw**/mvnw.cmd**/.mvn**/target**/.gitignore.idea Original: https://www.cnblogs.com/Cod…

    Java 2023年6月5日
    070
  • java 监听redis事件

    第一步:利用RDM等redis连接工具查看相应事件,然后去网上搜索 一下,会有redis各种事件的说明,选择契合业务的事件; 第二步:创建监听处理类; 1 package com….

    Java 2023年6月6日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球