• @Scheduled注解详解


    文章目录


    1.注解源码

    @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Repeatable(Schedules.class)
    public @interface Scheduled {
    
    	String cron() default "";
    
    	String zone() default "";
    
    	long fixedDelay() default -1;
    
    	String fixedDelayString() default "";
    
    	long fixedRate() default -1;
    
    	String fixedRateString() default "";
    	
    	long initialDelay() default -1;
    
    	String initialDelayString() default "";
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2.注解参数

    参数

    说明

    示例

    cron

    任务执行的cron表达式

    0/2 * * * *

    zone

    cron表达时解析使用的时区,默认为服务器的本地时区。
    使用java.util.TimeZone#getTimeZone(String)方法解析

    GMT-8:00

    fixedRate

    固定速率
    上一次任务执行开始到下一次执行开始的间隔时间固定,单位为ms。
    若在调度任务执行时,上一次任务还未执行完毕,会加入worker队列,等待上一次执行完成后,马上执行下一次任务

    1000

    fixedRateString

    与fixedRate一致,只是间隔时间使用java.time.Duration#parse解析

    1000或PT1S

    fixedDelay

    固定延迟
    上一次任务执行结束到下一次执行开始的间隔时间固定,单位为ms。

    1000

    fixedDelayString

    与fixedDelay一致,只是间隔时间使用java.time.Duration#parse解析

    1000或PT1S

    initialDelay

    首次延迟多长时间后执行,单位ms。
    之后按照fixedRate、fixedRateString、fixedDelay、fixedDelayString指定的规则执行,需要指定其中一个规则。
    注意:不能和cron一起使用

    1000

    initialDelayString

    与initialDelay 一致,只是间隔时间使用java.time.Duration#parse解析

    1000或PT1S

    3.示例

    cron

    @Scheduled(cron = "0/2 * * * * ?")
    
    • 1

    从0秒开始,每隔两秒执行一次。

    zone

    @Scheduled(cron = "0/2 * * * * ?", zone = "GMT-8:00")
    
    • 1

    从0秒开始,每隔两秒执行一次。

    指定时间使用的时区为东八区。

    fixedRate

    @Scheduled(fixedRate = 1000)
    
    • 1

    1秒执行一次,上次执行开始后过1秒执行下一次。若到了1秒后但上次执行还未完成,会加入worker队列,等待上一次执行完成后,马上执行下一次。

    fixedRateString

    @Scheduled(fixedDelayString = "1000")
    
    
    @Scheduled(fixedDelayString = "PT1S")
    
    • 1
    • 2
    • 3
    • 4

    都表示1秒执行一次,上次执行开始后过1秒执行下一次。若到了1秒后但上次执行还未完成,会加入worker队列,等待上一次执行完成后,马上执行下一次。

    fixedDelay

    @Scheduled(fixedDelay = 1000)
    
    • 1

    1秒执行一次,上次执行完成后过1秒继续执行下一次。

    fixedDelayString

    @Scheduled(fixedDelayString = "1000")
    
    
    @Scheduled(fixedDelayString = "PT1S")
    
    • 1
    • 2
    • 3
    • 4

    都表示1秒执行一次,上次执行完成后过1秒继续执行下一次。

    initialDelay

    @Scheduled(initialDelay = 5000, fixedRate = 2000)
    
    • 1

    首次5秒后执行,后续每隔2秒执行一次(遵循fixedRate 规则)

    @Scheduled(initialDelay = 5000, fixedDelay = 2000)
    
    • 1

    首次5秒后执行,后续每隔2秒执行一次(遵循fixedDelay 规则)

    注意:initialDelay、initialDelayString都不能和cron一起使用

    initialDelayString

    @Scheduled(initialDelayString = "5000", fixedRate = 2000)
    
    • 1

    首次5秒后执行,后续每隔2秒执行一次(遵循fixedRate 规则)

    @Scheduled(initialDelayString = "5000", fixedDelay = 2000)
    
    • 1

    首次5秒后执行,后续每隔2秒执行一次(遵循fixedDelay 规则)

    注意:initialDelay、initialDelayString都不能和cron一起使用

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    210. 课程表 II
    Matlab匿名函数教程
    P30 JComboBox下拉列表框
    Python中Scrapy框架搭建ip代理池教程
    WebRTC系列 -- iOS 视频采集(2)
    【软件工程_设计模式Designer Method】三类?23种常用设计模式?-简介-作业一
    linux清理僵尸进程
    计算机竞赛 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python
    基于JavaEE的数字迎新系统丨新生报到系统(Java+SSH)
    C.打牌的贝贝(卡特兰数)
  • 原文地址:https://blog.csdn.net/drhrht/article/details/126098454