现在有每天抽数据,统计数据的需求,虽然说我有点理解不了 记录 每个部门 的 销售评审流程 的 平均处理时长 这个数据有什么意义。码农?malou!

SpringBoot 从1.3.0版本开始提供对定时任务的支持

准备工作

1、在启动类上添加@EnableScheduling开启定时任务

2、在定时任务上添加@Scheduled(所在的类上添加@Component)

3、写cron表达式或者配置fixedRate/fixedDelay属性

cron表达式

SpringBoot只支持6位的cron表达式,不支持7位(没有Year/年)

SpringBoot只支持cron表达式中的专有符号?,其他的反正用不到就不写了,cron表达式在线生成工具

* * * * * * *
字段 Seconds Minutes Hours DayofMonth Month DayofWeek Year
含义 星期
符号 , - * / , - * / , - * / , - * / ? , - * / , - * / , - * / ?

符号解析:

, :枚举

​ eg:Seconds中1,5,表示在第1秒,第5秒的时候触发事件
- :范围

​ eg:Seconds中1-5,表示在1秒到5秒,这个区间内每秒都触发事件
* :通配符

​ eg:Seconds中使用,表示每一秒都触发事件
/ :间隔

​ eg:Seconds中1/5,表示第1秒触发一次,后隔5秒触发一次事件

? :不指定值

​ 只能用在DayofMonthDayofWeek两个域,两者互斥,须对其一设置

fixedRate

@Schedule中的属性,用于指定任务执行的时间间隔(单位为毫秒),表示以固定的频率执行某个方法或任务

eg:如果设置为1s,任务将每隔1s执行一次,每次任务执行开始后等待1s再执行下一次

fixedRate从上一次方法执行开始的时间算起,如果上一次方法执行时间超过了间隔时间,那上一次任务执行完之后,立即执行下一个任务

fixedDelay

@Schedule中的一个属性,用于指定任务执行之间的延迟时间(单位为毫秒),表示以固定的时间间隔执行某个方法或任务,并在每次执行完成后等待指定的延迟时间再执行下一次

eg:如果设置为1s,任务将每隔1s执行一次,每次任务执行完成后等待1s再执行下一次

fixedDelay从上一次方法执行完成的时间算起,如果上一次方法执行阻塞住了,会等到上一次方法执行完,并等待给定间隔时间之后执行下一次

开启异步来执行定时任务

1、在启动类上添加注解@EnableAsync

2、定时任务上添加@Async

开启异步后,每个任务都会从线程池里分配一个线程来执行,避免耗时长的任务影响到其他任务