栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

定时任务注解@Scheduled

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

定时任务注解@Scheduled

概述

要使用@ Scheduled注解,首先需要在启动类添加@ EnableScheduling,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@ Scheduled注解,执行计划任务。




注解定义
@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 "";
}

参数说明
参数参数说明示例
cron任务执行的cron表达式@ Scheduled(cron=”0/1 * * * * ?”)
zonecron表达时解析使用的时区,默认为服务器的本地时区,使用java.util.TimeZone#getTimeZone(String)方法解析@ Scheduled(zone =” GMT-8:00”)
fixedDelay上一次任务执行结束到下一次执行开始的间隔时间,单位为ms@ Scheduled(fixedDelay = 1000 * 60)
fixedDelayString上一次任务执行结束到下一次执行开始的间隔时间,使用java.time.Duration#parse解析@ Scheduled(fixedDelayString = “PT15M”)
fixedRate以固定间隔执行任务,即上一次任务执行开始到下一次执行开始的间隔时间,单位为ms,
若在调度任务执行时,上一次任务还未执行完毕,会加入worker队列,等待上一次执行完成后立即执行下一次任务
@ Scheduled(fixedRate = 2000)
fixedRateString与fixedRate逻辑一致,只是使用java.time.Duration#parse解析@ Scheduled( fixedRateString=”PT15M”)
initialDelay首次任务执行的延迟时间@ Scheduled(initialDelay = 1000)
initialDelayString首次任务执行的延迟时间,使用java.time.Duration#parse解析@ Scheduled(initialDelayString = “PT15M”)

cron表达式语法
[秒] [分] [小时] [日] [月] [周] [年]
注:[年]不是必须的域,可以省略[年],则一共6个域




使用说明

定时任务执行默认是单线程模式,会创建一个本地线程池,线程池大小为1。当项目中有多个定时任务时,任务之间会相互等待,同步执行
源码

// org.springframework.scheduling.config.ScheduledTaskRegistrar#scheduleTasks
if (this.taskScheduler == null) {
    this.localExecutor = Executors.newSingleThreadScheduledExecutor();
    this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);
}

// java.util.concurrent.Executors#newSingleThreadScheduledExecutor()
public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
    return new DelegatedScheduledExecutorService(new ScheduledThreadPoolExecutor(1));
}
  1. 注意:如果是多节点部署服务器,并且一个定时任务只需要执行一次的情况下,有两种方法实现
  1. 分布式锁
  2. 指定某一节点执行(此种情况会使多节点部署失去意义)




如果想了解分布式锁,请关注我,下期会说分布式锁。
  • 本文作者:好名字
  • 原文链接:定时任务注解@Scheduled
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/600984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号