在开发过程中,很多需求都需要定时任务才能完成。SpringBoot 提供了简单快捷的实现方式,我们只需要添加一些注解就可以使用。那么什么场景下需要使用到定时任务呢?例如:整点发放优惠券,每天自动更新收益,定时生成统计报表等等。
启用定时任务
通过在启动类上添加 @EnableScheduling
注解即可启动定时任务。
@EnableScheduling
@SpringBootApplication
public class SpringBootScheduling {
public static void main(String[] args) {
SpringApplication.run(SpringBootScheduling.class, args);
}
}
复制代码
设置定时任务
@Component
public class ScheduledTasks {
private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
@Scheduled(fixedRate = 1000)
public void taskOne() {
logger.info("--> task one");
}
@Scheduled(fixedDelay = 1000)
public void taskTwo() {
logger.info("--> task two");
}
@Scheduled(initialDelay = 1000, fixedDelay = 1000)
public void taskThree() {
logger.info("--> task three");
}
@Scheduled(cron = "* * * * * *")
public void taskFour() {
logger.info("--> task four");
}
}
复制代码
@Scheduled
可以设置两种类型的定时任务,一种是 fixedRate
的固定值间隔的定时任务,另一种是基于 cron
表达式的定时任务。cron
直接传表达式就可以了。固定值分以下几种:
@Scheduled(fixedRate = 1000)
上一次开始执行时间点之后一秒再执行@Scheduled(fixedDelay = 1000)
上一次执行完毕时间点之后一秒再执行@Scheduled(initialDelay = 1000, fixedRate = 1000)
:第一次延迟一秒后执行,之后按fixedRate
的规则每秒执行一次