天天看点

定时任务注解@Scheduled

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

参数

参数说明

示例

cron

任务执行的cron表达式

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

zone

cron表达时解析使用的时区,默认为服务器的本地时区,使用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。当项目中有多个定时任务时,任务之间会相互等待,同步执行

源码

注意:如果是多节点部署服务器,并且一个定时任务只需要执行一次的情况下,有两种方法实现

分布式锁

指定某一节点执行(此种情况会使多节点部署失去意义)

本文作者:好名字 原文链接:定时任务注解@Scheduled 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。