@Scheduled注解简介

本文介绍了SpringBoot中@Scheduled注解的使用,包括其在定时任务中的应用,以及cron、fixedRate和fixedDelay三种执行时间配置方式。详细解读了主要参数和Cron表达式的使用,特别是*和?的区别。
摘要由CSDN通过智能技术生成

一、注解介绍

@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。

二、源码

package org.springframework.scheduling.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
import org.springframework.aot.hint.annotation.Reflective;

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
@Reflective
public @interface Scheduled {
    String CRON_DISABLED = "-";

    String cron() default "";

    String zone() default "";

    long fixedDelay() default -1L;

    String fixedDelayString() default "";

    long fixedRate() default -1L;

    String fixedRateString() default "";

    long initialDelay() default -1L;

    String initialDelayString() default "";

    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    String scheduler() default "";
}

三、Spring接入说明

@Scheduled需要配合@EnableScheduling使用。使用时,将@Scheduled注解放在待定时的方法名上方,将 @EnableScheduling放在项目主启动类类名上方

@Scheduled主要有三种配置执行时间的方式:cron、fixedRate和fixedDelay。

四、主要参数说明

参数说明
cron任务执行的cron表达式
zonecron表达时解析使用的时区,默认为服务器的本地时区。使用java.util.TimeZone#getTimeZone(String)方法解析 GMT-8:00
fixedRate固定速率。上一次任务执行开始到下一次执行开始的间隔时间固定,单位为ms。若在调度任务执行时,上一次任务还未执行完毕,会加入worker队列,等待上一次执行完成后,马上执行下一次任务
fixedRateString与fixedRate一致,只是间隔时间使用java.time.Duration#parse解析
fixedDelay固定延迟。上一次任务执行结束到下一次执行开始的间隔时间固定,单位为ms。
fixedDelayString与fixedDelay一致,只是间隔时间使用java.time.Duration#parse解析
initialDelay首次延迟多长时间后执行,单位ms。之后按照fixedRate、fixedRateString、fixedDelay、fixedDelayString指定的规则执行,需要指定其中一个规则。注意:不能和cron一起使用
initialDelayString与initialDelay 一致,只是间隔时间使用java.time.Duration#parse解析
timeUnit时间单位。默认为毫秒。

五、Cron表达式

参考 Cron表达式详解

在这里插入图片描述

cron表达式*和?的区别

  • 星号(* ):
    在cron表达式中,星号(*)表示该字段的每一个可能值。
    例如,在分钟字段中使用*表示“每分钟”。
    在其他字段中,*也表示接受所有可能的值。、

  • 问号(?):
    问号(?)只在日期和星期字段中使用。
    当在日期和星期字段中同时出现*时,?用于屏蔽其中一个字段,以确保任务只在满足另一个字段条件的时间触发。
    ?通常表示“无意义的值”,相当于一个占位符。
    例如,如果日期和星期字段都设置为1,那么任务将在每月的第一天触发。但是,如果这两个字段同时设置为1,而实际上每个月的第一天可能不总是星期一,这时可以使用?来屏蔽其中一个字段,确保任务只在满足特定条件的时间触发。例如,1 * * * * ?表示每天的整点触发任务,而1 ? * * * *表示每月第一天的整点触发任务。12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值