springboot定时器注解和cron表达式如何使用

发布时间:2024年01月17日

定时器表达式是用来定义定时任务的时间规则。在不同的编程语言或框架中,定时器表达式的语法和规则可能会有所不同。以下是几种常见的定时器表达式示例:

  • Cron 表达式(常用于 Unix、Linux 系统和一些编程语言):

    1. * * * * *:每分钟执行一次
    2. 0 * * * *:每小时的 0 分钟执行一次
    3. 0 0 * * *:每天的 0 点整执行一次
    4. 0 0 12 * *:每天的中午 12 点整执行一次
    5. 0 0 8-18/2 * *:每天早上 8 点到下午 6 点之间每隔两个小时执行一次
  • 时间间隔表达式(常用于一些编程语言和框架):

    1. */10 * * * *:每隔 10 分钟执行一次
    2. 0 */2 * * *:每隔 2 小时执行一次
    3. 0 0 */3 * *:每隔 3 天执行一次
    4. 0 0 0 */2 *:每隔 2 个月执行一次
  • 时间点表达式(常用于一些编程语言和框架):

    1. @yearly?或?@annually:每年执行一次(等同于?0 0 1 1 *
    2. @monthly:每月执行一次(等同于?0 0 1 * *
    3. @weekly:每周执行一次(等同于?0 0 * * 0
    4. @daily?或?@midnight:每天执行一次(等同于?0 0 * * *
    5. @hourly:每小时执行一次(等同于?0 * * * *
  • @Scheduled注解可以控制方法定时执行,其中有三个参数可选择:

  1. fixedDelay控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次。
  2. fixedRate是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
  3. cron表达式可以定制化执行任务,但是执行的方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。
  4. initialDelay 。如: @Scheduled(initialDelay = 10000,fixedRate = 15000
  5. 这个定时器就是在上一个的基础上加了一个initialDelay = 10000 意思就是在容器启动后,延迟10秒后再执行一次定时器,以后每15秒再执行一次该定时器。
  • 下面是几种常见的使用?@Scheduled?注解的示例:

在方法上使用?@Scheduled?注解

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyScheduler {
    @Scheduled(cron = "0 0 12 * * ?") // 每天中午 12 点执行
    public void myTask() {
        // 定时任务的逻辑操作
    }
}

在类上使用?@Scheduled?注解

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@Scheduled(cron = "0 0 12 * * ?") // 每天中午 12 点执行
public class MyScheduler {
    public void myTask() {
        // 定时任务的逻辑操作
    }
}

使用固定频率执行

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyScheduler {
    @Scheduled(fixedRate = 5000) // 每隔 5 秒执行一次
    public void myTask() {
        // 定时任务的逻辑操作
    }
}

使用固定延迟执行

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyScheduler {
    @Scheduled(fixedDelay = 5000) // 上一次执行完成后,延迟 5 秒再执行
    public void myTask() {
        // 定时任务的逻辑操作
    }
}

需要注意的是,在使用?@Scheduled?注解之前,需要在 Spring Boot 应用程序的配置类上添加?@EnableScheduling?注解以启用定时任务的支持。

另外,除了使用?cronfixedRate?和?fixedDelay?参数来定义时间规则外,还可以使用其他参数,如?initialDelayzone?等。


在线cron表达式:http://cron.qqe2.com/

如果一些复杂的表达式不知道如何用在线表达式写,可借助于人工智能chatGPT去完成,把你的表达式描述出来。

AI人工智能网站链接如下:

https://aiedu-super.cn/

文章来源:https://blog.csdn.net/lichongxyz/article/details/135642893
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。