## 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时间后执行