// 未分类
SpringBoot的Scheduled
发布 2018-09-30 · 永久链接
no excerpt about this article
## Schedule
有时候需用到定时的功能去实现一些功能。比如定时发送一些邮件、发送一些推送等。
这时候需要用到**Scheduled**注解
## 在SpringBoot中开启Schedule
- 先要在启动类中加上`@EnableScheduling`注解
- 创建++Component++
- 编写schedule方法并打上`@Scheduled`注解
比如
``` java
/**
* @author dqn
* created at 2018/8/2 - 17:33
*/
@Component
public class TestSchedule {
Logger logger = LoggerFactory.getLogger(TestSchedule.class);
/**
* cron * * * * * *
* 秒 分 时 号 月 星期X
* 0-59 0-59 0-24 1-31 1-12 1-7
* 其实还有一位可以空, 年份,1970-2099
* 定时任务,符合cron表达式的时候触发
*/
@Scheduled(cron = "0 * * * * *")
public void testCommon(){
logger.info("common "+Instant.now().toString());
}
/**
* 在执行完后fixedDelay后执行
*/
@Scheduled(fixedDelay = 1000)
public void testFixDelay(){
logger.info("delay "+Instant.now().toString());
}
/**
* 第一次缓initDelay后执行
* 之后在执行完后fixedDelay后执行
*/
@Scheduled(initialDelay = 1000,fixedDelay = 1000)
public void testInitDelay(){
logger.info("delay "+Instant.now().toString());
}
/**
* 在前一次 开始 执行后fixedRate后执行
*/
@Scheduled(fixedRate = 2000)
public void testRateDelay(){
logger.info("rate "+Instant.now().toString());
}
}
```
## 注解的一些配置
### 第一类,定时任务
第一种是定时任务,在`@Scheduled`中的`cron`值加上一个表达式,用来表示在某个时间的形式符合这个表达式时执行方法。
#### cron-like expression
表达式一般是这样的: `* * * * * * *`
一共7个位置,最后一个可以不填,也就是说++可以++只设置6位。
从左到右按顺序是: 秒、分、时、日、月、周X、~~年~~
他们的值分别是:
- 0-59 秒
- 0-59 分
- 0-23 时
- 1-31 日
- 1-12 月
- 1-7 周
- 1970-2099 年
#### 例子
`0 * * * * ?` 表示每次秒到0的时候触发,即每分钟触发一次。
`0 0 * * * ?` 表时每次分到0的,每小时一次,也可以 `* 0 * * * *`
`* * 3 * * ?` 表示每天3点执行
`* * 3 15 * ?` 表示每个月的15号的3点执行。问号表示不确定,或者说都可以,因为**星期X**和**日**是冲突的
`* * 3 ? * 1` 表示每周一的3点执行,相应的,日期是?号
`* * 3-5 * * ?` 表示每天的3、4、5点都执行, **-** 表示范围(range)
同时还提供了 `3,6,9` 表示一个列表值,还有`2/10`表示从2开始,每次递增10。
# 延时任务
延时有两种,开始后延时、完成后延时
#### fixedDelay
fixedDelay 表示在上一次执行后延时 XX 时间后执行
#### fixedRate
fixedRate表示在上一次开始执行就计时,在XX时间后执行