【Spring】@Scheduled 定时器注解使用

引言

@Scheduled 是用于在 Spring 框架中为方法配置定时任务的注解,它允许在一定的时间间隔或在特定的时间点运行一个方法,我们一般将该方法放在服务类中。


主要属性介绍

属性名称 介绍
fixedRate 以指定的毫秒数间隔连续执行方法。每次执行开始的时间都是固定的间隔时间。
示例:@Scheduled(fixedRate = 5000) 表示该方法每5秒执行一次
fixedDelay 以指定的毫秒数间隔执行方法。方法执行完毕后,等待给定的延迟时间,然后开始下一次执行。
示例:@Scheduled(fixedDelay = 5000) 表示方法执行完毕后等待5秒,然后再执行下一次。
cron 使用Cron表达式配置定时任务。Cron表达式可以非常灵活地指定任务的执行时间。
示例:@Scheduled(cron = “0 0 * * * ?”) 表示每天的整点执行一次该方法
initialDelay 在系统初始延迟时间之后开始首次执行。
示例:@Scheduled(initialDelay = 2000, fixedRate = 5000) 在系统初始后,延迟2秒后开始,然后每5秒执行一次

cron 语法

简单介绍

Cron 表达式是一种由6到7个字段组成的字符串,每个字段代表时间的一个部分。这些字段以空格分隔,依次是:

秒(0-59)
分钟(0-59)
小时(0-23)
日期(1-31)
月份(1-12或JAN-DEC)
星期(1-7或SUN-SAT,周日为1)
年份(可选)

通常你会看到6个字段的Cron表达式(年份通常不使用)。每个字段中的值可以是数字、特殊符号或者范围表示。


特殊符号

*(星号):表示所有可能的值。如在分钟字段中使用,表示每分钟触发。
?(问号):仅在日期和星期字段中使用。表示不指定值,通常是因为在另一个字段中已经指定了条件。
-(连字符):表示一个范围。例如,1-5表示从1到5的范围。
,(逗号):表示列出多个值。例如,1,3,5表示1、3和5。
/(斜杠):表示步长。例如,0/15在秒字段中表示从0秒开始每15秒触发。
L:在日期字段中表示最后一天;在星期字段中表示最后一个星期几。例如,L在日期字段中表示该月的最后一天,在星期字段中表示周六。
W:表示工作日(星期一至五)。例如,15W表示离15号最近的工作日。
#:在星期字段中使用,表示一个特定的星期几。例如,2#3表示每月的第三个星期二


例子

每天早上9点执行一次

@Scheduled(cron = "0 0 9 * * ?")

每月的第一个星期一早上10点执行

@Scheduled(cron = "0 0 10 ? * 2#1")

每周三和周五下午2点执行

@Scheduled(cron = "0 0 14 ? * 3,5")

每隔10分钟执行一次

@Scheduled(cron = "0 */10 * * * ?")

每个月的最后一天晚上11点执行

@Scheduled(cron = "0 0 23 L * ?")

使用 @Scheduled 注解注意事项

线程安全

@Scheduled 注解的方法可能会被多个线程同时执行。如果方法不是线程安全的,可能导致数据竞争和其他并发问题。因此,在使用 @Scheduled 注解时,确保方法是线程安全的。


执行时间

如果定时任务的执行时间比间隔时间长,会导致方法重叠执行。根据需要调整 fixedRate 参数或 fixedDelay 参数。


配置

确保在 Spring 配置文件中启用了任务调度。通常在主应用类或配置类中使用 @EnableScheduling 注解。


异常处理

在定时任务中要注意异常处理,以免任务在发生错误时被中断。可以通过捕获和记录异常,或者重试失败任务来提高可靠性。





End


相关推荐

  1. 【Spring】@Scheduled 定时器注解使用

    2024-04-22 23:08:05       39 阅读
  2. 定时任务类:使用@Scheduled注解设计定时任务

    2024-04-22 23:08:05       23 阅读
  3. 定时器使用

    2024-04-22 23:08:05       24 阅读
  4. golang定时器使用示例

    2024-04-22 23:08:05       45 阅读
  5. 使用定时器消除抖动

    2024-04-22 23:08:05       24 阅读
  6. uniapp 使用定时器和取消定时器

    2024-04-22 23:08:05       36 阅读
  7. 使用 kapt 注解生成依赖注入代码

    2024-04-22 23:08:05       19 阅读
  8. SpringBoot-注解:@Async 使用

    2024-04-22 23:08:05       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 23:08:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 23:08:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 23:08:05       82 阅读
  4. Python语言-面向对象

    2024-04-22 23:08:05       91 阅读

热门阅读

  1. iOS知识点 ---- 离屏渲染

    2024-04-22 23:08:05       33 阅读
  2. CentOS常见命令详解

    2024-04-22 23:08:05       39 阅读
  3. vueelementui+tabs选项卡样式更改-内容待递增

    2024-04-22 23:08:05       35 阅读
  4. 安卓平台下OkHttp3网络库的全面探讨与实践

    2024-04-22 23:08:05       36 阅读
  5. python selenium 获取伪类

    2024-04-22 23:08:05       38 阅读
  6. SCP收容物081~09

    2024-04-22 23:08:05       35 阅读
  7. 设计模式详解(十五)——模板方法模式

    2024-04-22 23:08:05       41 阅读
  8. git 简单使用

    2024-04-22 23:08:05       32 阅读
  9. php ArrayAccess

    2024-04-22 23:08:05       35 阅读
  10. 乾坤微前端js沙箱机制

    2024-04-22 23:08:05       34 阅读