@Scheduled注解

Wesley13
• 阅读 931

1 概述

@Scheduled注解是spring boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行.注意需要配合@EnableScheduling使用,配置@Scheduled主要有三种配置执行时间的方式,cron,fixedRate,fixedDelay.

2 cron

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

单位

允许值

允许通配符

0-59

, - * /

0-59

, - * /

0-23

, - * /

1-31

, - * / ? L W

1-12 或 JAN-DEC(大小写均可)

, - * / ?

1-7 或 SUN-SAT(大小写均可)

, - * / ? L #

2.1 cron通配符

符号

含义

*

所有值.在秒字段上表示每秒执行,在月字段上表示每月执行

?

不指定值,不需要关系当前指定的字段的值,比如每天都执行但不需要关心周几,就可以把周的字段设为?

-

区间,如秒的0-2,表示0秒,1秒,2秒都会触发

,

多个值,比如在0秒,20秒,25秒触发,可以把秒的字段设为0,20,25

/

递增触发,比如秒的字段上设0/3,从第0秒开始,每隔3秒触发

L

最后,只允许在日字段或周字段上,在日字段上使用L表示当月最后一天,在周字段上使用3L表示该月最后一个周四

W

只允许用在日字段上,表示距离最近的该日的工作日.工作日指的是周一至周五

只允许在周字段上,表示每月的第几个周几,如2#3,每月的第3个周二

2.2 cron示例

@Scheduled(cron = "0 * * * 1 SAT") //每年的1月的所有周六的所有0秒时间执行


@Scheduled(cron = "0 0 0 1 Jan ?") //每年的1月的1日的0时0分0秒执行

cron支持占位符,若在配置文件中有

cron = 2 2 2 2 2 ?

@Scheduled(cron = "${cron}")

表示每年的二月二号的两时两分两秒执行.

3 fixedRate

3.1 fixedRate

fixedRate表示自上一次执行时间之后多长时间执行,以ms为单位. 如

@Scheduled(fixedRate = 1000 * 5)

自上次执行之后5秒再执行.

3.2 fixedRateString

有一个类似的参数叫fixedRateString,是字符串的形式,支持占位符. 如

@Scheduled(fixedRateString = "1000")

自上次执行1秒再执行. 若在配置文件中有相应的属性,可以用占位符获取属性,如在application.properties中有

interval=2000

可以使用

@Scheduled(fixedRateStirng="${interval}")

表示2秒间隔.

4 fixedDelay

4.1 fixedDelay

fixedDelay与fixedRate有点类似,不过fixedRate是上一次开始之后计时,fixedDelay是上一次结束之后计时,也就是说,fixedDelay表示上一次执行完毕之后多长时间执行,单位也是ms.

@Scheduled(fixedDelay = 1000 * 3600 * 12) //上一次执行完毕后半天后再次执行

4.2 fixedDelayString

与fixedRateString类似,也是支持占位符

@Scheduled(fixedDelayString = "${fixedDelay}")

5 initialDelay

5.1 initialDelay

initialDelay表示首次延迟多长时间后执行,单位ms,之后按照cron/fixedRate/fixedRateString/fixedDelay/fixedDelayString指定的规则执行,需要指定其中一个规则.

@Scheduled(initialDelay=1000,fixedRate=1000) //首次运行延迟1s

5.2 initialDelayString

与initialDelay类似,不过是字符串,支持占位符.

@Scheduled(initialDelayString = "${initialDelay}",cron = "0 0 0 14 4 ?") 
//按照配置文件initialDelay指定的时间首次延迟,并于每年4月14日0时0分0秒执行
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
Spring注解@Scheduled 多线程异步执行
一、前言:Spring定时任务@Schedule的使用方式,默认是单线程同步执行的,启动过程是一个单线程同步启动过程,一旦中途被阻塞,会导致整个启动过程阻塞,其余的定时任务都不会启动。二、@Schedule注解多线程的实现:多个定时任务的执行,通过使用@Async注解来实现多线程异步调用。@Scheduled(
Easter79 Easter79
3年前
Springboot自带定时任务实现动态配置Cron参数
同学们,我今天分享一下SpringBoot动态配置Cron参数。场景是这样子的:后台管理界面对定时任务进行管理,可动态修改执行时间,然后保存入库,每次任务执行前从库里查询时间,以达到动态修改Cron参数的效果。好,咱们一起来看看是怎么回事。1.Timer:这是java自带的java.util.Timer类,这个类允许你调度一个j
Stella981 Stella981
3年前
Linux的定时任务
任务计划的条件:1.在未来的某个时间点执行一次某个任务(atbatch)2.周期性的执行某个任务(cron)at在指定时间执行任务_用法_at\选项参数\\时间\_选项参数_\l      查看作业\c      显示即将执行任务的细节\d      使用任务id号
Easter79 Easter79
3年前
SpringBoot定时任务xml配置
    由于定时任务需要工程实施人员进行配置,写在Java代码里面不利于维护,故采用SpringBoot集成SpringXML文件进行配置,属于新瓶装旧酒。1新建定时任务类packagecom.duhongming.springbootscheduled.scheduled;importlomb
Stella981 Stella981
3年前
Spring Boot 动态修改 Scheduled (系统启动默认执行,动态修改)
场景:可配置的Scheduled执行时间,正常的Scheduled 是在项目启动的时候固定死的,没办法根据调用后台代码自动更新Scheduled执行时间例如:系统启动读取时间 Cron: 003\\?,通过执行后台方法可以动态配置 Cron时间格式,并且清楚掉原本执行任务,执行新的设置定时任务时间1、
Stella981 Stella981
3年前
SpringBoot定时任务xml配置
    由于定时任务需要工程实施人员进行配置,写在Java代码里面不利于维护,故采用SpringBoot集成SpringXML文件进行配置,属于新瓶装旧酒。1新建定时任务类packagecom.duhongming.springbootscheduled.scheduled;importlomb
Easter79 Easter79
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了