一、概述
@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。注意需要
- 启动类加@EnableScheduling
- 实现类加@Component
- 方法上加@Scheduled
@Scheduled主要有以下几种配置执行时间的方式:
- 总结:以下参数内容为String,均可支持占位符
参数 | 描述 | 示例 |
cron | 1. 项目启动后不会直接运行 2. 支持占位符 | //每十秒执行一次 @Scheduled(cron= "0/10 * * * * *") |
fixedRate | 1. 项目启动后,执行一次 2. 上次调用后间隔固定时间(毫秒)调用 | @Scheduled(fixedRate = 5000) //上次开始无论是否结束5秒钟之后会再次执行 |
fixedRateString | 1. 同上 2. 时间使用字符串形式 3. 支持占位符 | @Scheduled(fixedRateString = "5000")//上次开始无论是否结束5秒钟之后会再次执行 |
fixedDelay | 1. 项目启动后,执行一次 2. 上次调用结束后间隔固定时间(毫秒)调用 | @Scheduled(fixedDelay = 5000) //上次调用结束后5秒再执行 |
fixedDelayString | 1. 同上 2. 时间使用字符串形式 3. 支持占位符 | @Scheduled(fixedDelayString = "${time.fixedDelay}") |
initialDelay | 1. 项目启动后,延迟执行 2. 配合fixedRate / fixedDelay | @Scheduled(initialDelay=1000*10, fixedRate=5000)//延迟10秒后执行第一次,之后按fixedRate的规则每5秒执行一次 |
initialDelayString | 1. 项目启动后,延迟执行 2. 配合fixedRateString/ fixedDelayString 3. 支持占位符 | @Scheduled(initialDelayString="1000", fixedRate=5000)//延迟1秒后执行第一次,之后按fixedRate的规则每5秒执行一次 |
二、参数介绍
1、cron
格式:
可以分为6或7个域,由空格隔开。
- 6个域:秒 分 时 日 月 星期几
- 7个域:秒 分 时 日 月 星期几 年
语法:允许使用的通配符
- "*" 表示所有值
- "-" 表示区间
- "?" 表示不指定值
- "," 表示指定多个值,逗号拼接
- "/" 表示增量触发,例如秒元素中的"0/15" 表示从0秒开始,每15秒触发(0,15,30,45)
cron支持占位符
- @Scheduled(cron = "${cron}")
三、使用@Scheduled注意事项
- 定时器的任务方法不能有返回值;
- 如果该方法需要与应用程序上下文的其他对象进行交互,通常是通过依赖注入来实现
- 定时器默认为单线程
四、占位符的使用