spring 定时任务 @Scheduled

@Scheduled 源码如下:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
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;
}

使用@Scheduled 第一需要开启定时任务 需要在config类上添加@EnableScheduling注解
例如:

@Configuration
@EnableScheduling
public class AppConfig {
}

@Scheduled 可以在方法及注解类上使用
例如

// 上一次开始执行时间点之后 6 秒再执行。
@Scheduled(fixedRate = 6000)
public void doSomething() {
    // something that should run periodically
}
// 上一次执行完毕时间点之后 6 秒再执行。
@Scheduled(fixedDelay = 6000)
public void doSomething() {
    // something that should run periodically
}
@Scheduled 默认的时间单位为毫秒 可以通过timeUnit属性修改

// 上一次执行完毕时间点之后 1分钟再执行。
@Scheduled(fixedDelay = 1,timeUnit = TimeUnit.SECONDS)
public void doSomething() {
    // something that should run periodically
}
initialDelay表明首次延迟多长时间后执行,单位ms,之后按照cron/fixedRate/fixedRateString/fixedDelay/fixedDelayString指定的规则执行,需要指定其中一个规则.
@Scheduled(initialDelay=1000,fixedRate=1000) //首次运行延迟1s

cron是@Scheduled的一个参数,是一个字符串,以5个空格隔开,只允许6个域(注意不是7个,7个直接会报错),分别表明秒,分,时,日,月,周.

spring 定时任务 @Scheduled

spring 定时任务 @Scheduled

@Scheduled(cron = “0 * * * 1 SAT”) //每年的1月的所有周六的所有0秒时间执行
@Scheduled(cron = “0 0 0 1 Jan ?”) //每年的1月的1日的0时0分0秒执行

还可以使用zone属性指定在哪个时区解析cron表达式。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
卑微的小虫的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容