SpringBoot 定时任务
前言
Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor、TaskScheduler接口,spring boot作为对spring功能的整合,提供了两个注解:@EnableScheduling、@Scheduled 既可简单的实现任务调度功能。
注解介绍
1.@EnableScheduling
类注解,添加到项目主类上,标志启动注解
2.@Scheduled
方法注解,设置调度规则
(1). cron 表达式与 zone
zone:表示将解析cron表达式的时区。
关于 cron 表达式,参考Spring Quartz 实现多任务定时调用 里面的附录。
(2). fixedRate 或fixedRateString的解释
调用固定周期(以毫秒为单位)执行方法。就是上一次开始执行时间点之后延迟执行。
(3). fixedDelay 或fixedDelayString的解释
上次调用结束和下一次调用结束之间的固定周期(以毫秒为单位)执行方法。就是上一次执行完毕时间点之后延迟执行。
(4). initialDelay 或initialDelayString 的解释
在第一次执行fixedRate或fixedDelay任务之前延迟(以毫秒为单位)。
注意点:
- String和无String的区别是值为String和Long类型
- (4)必须配合(2)|(3)使用
- (1),(2),(3) 只能存在一个
实现
1.启动定时任务的配置-@EnableScheduling
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.创建定时任务组件实现定时任务
@Component
public class SchedulerTask {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(cron="*/6 * * * * ?")
private void process(){
//实现业务
System.out.println("this is scheduler task runing "+dateFormat.format(new Date()));
}
@Scheduled(fixedDelay =2000)
public void process1()
{
//实现业务
System.out.println("延迟:" + dateFormat.format(new Date()));
}
@Scheduled(fixedDelayString ="3000")
public void process2()
{
//实现业务
System.out.println("延迟2:" + dateFormat.format(new Date()));
}
@Scheduled(initialDelay = 5000, fixedRateString = "5000")
public void process3()
{
//实现业务
System.out.println("rate23:" + dateFormat.format(new Date()));
}
}