Spring @Scheduled定时器注解使用方式

 更新时间:2024年08月02日 08:40:50   作者:杜小舟  
这篇文章主要介绍了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 注解。

异常处理

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis中SqlSession接口中selectList方法详解

    Mybatis中SqlSession接口中selectList方法详解

    这篇文章主要给大家介绍了关于Mybatis中SqlSession接口中selectList方法的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-03-03
  • Java中HashSet集合元素去重的操作代码

    Java中HashSet集合元素去重的操作代码

    在 Java 编程的广阔天地里,集合框架是开发者们不可或缺的得力工具,其中,HashSet以其独特的去重特性,成为处理不重复元素场景的首选,今天,咱们就深入探究一下HashSet集合元素的去重操作,需要的朋友可以参考下
    2025-03-03
  • Java中map和flatMap的区别举例详解

    Java中map和flatMap的区别举例详解

    这篇文章主要给大家介绍了关于Java中map和flatMap区别的相关资料,在Java中Stream接口有map()和flatmap()方法,两者都有中间流操作,并返回另一个流作为方法输出,需要的朋友可以参考下
    2023-10-10
  • springboot启动不加载bootstrap.yml文件的问题

    springboot启动不加载bootstrap.yml文件的问题

    这篇文章主要介绍了springboot启动不加载bootstrap.yml文件的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot整合liquibase及liquibase生成初始化脚本的方式

    SpringBoot整合liquibase及liquibase生成初始化脚本的方式

    这篇文章主要介绍了SpringBoot整合liquibase的相关资料,文中给大家介绍了liquibase生成初始化脚本的两种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • SpringBoot返回中文乱码问题解决方法汇总

    SpringBoot返回中文乱码问题解决方法汇总

    这几天在使用Spring Boot学习AOP原理的时候,通过浏览器访问后端接口的时候,响应报文总是出现中文乱码问题,下面这篇文章主要给大家介绍了关于SpringBoot返回中文乱码问题解决方法,需要的朋友可以参考下
    2023-06-06
  • 详解Java的MyBatis框架与Spring框架整合中的映射器注入

    详解Java的MyBatis框架与Spring框架整合中的映射器注入

    映射器注入方式可以将MyBatis与Spring映射好的XML文件实现配置共用,这里我们就来详解Java的MyBatis框架与Spring框架整合中的映射器注入:
    2016-06-06
  • 深入理解Maven环境搭建和介绍

    深入理解Maven环境搭建和介绍

    这篇文章主要介绍了深入理解Maven环境搭建和介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • java配置文件取值的多种方式总结

    java配置文件取值的多种方式总结

    这篇文章主要为大家详细介绍了java配置文件取值的多种方式,包括一般项目,国际化项目,springboot项目,文中的示例代码讲解详细,需要的可以参考下
    2023-11-11
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    java随机产生验证码,可以随机生成数字、大写字母、小写字母。还可以随机生成文字字体、及大小。在图片上面可能字体都不不同、大小不等
    2013-05-05

最新评论