1.是什么
springboot中用来注解需要定时执行的任务
2.怎么用
2.1 @EnableScheduling注解开启对计划任务的支持
2.2 @Scheduled声明该方法是计划任务,使用cron属性可按照指定时间执行,使用fixedRate属性每隔固定时间执行
使用fixedRate属性每隔固定时间执行,使用cron属性可按照指定时间执行
3.demo
3.1 配置类
@Configuration
@ComponentScan("com.dxj.springboot.springbootdemo")
@EnableScheduling
public class TaskSchedulerConfig {
}
3.2 计划任务执行类
@Service
public class ScheduledTaskService {
private static final SimpleDateFormatdateFormat =new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate =5000)
public void reportCurrentTime(){
System.out.println("每隔5秒执行一次"+dateFormat.format(new Date()));
}
@Scheduled(cron ="0 50 20 ? * *")
public void fixTimeExecution(){
System.out.println("在指定时间执行"+dateFormat.format(new Date()));
}
}
3.3 执行
public static void main(String[] args) {
AnnotationConfigApplicationContext context =new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
ScheduledTaskService scheduledTaskService = context.getBean(ScheduledTaskService.class);
}
3.4执行结果
4.单线程/多线程
改动后重新执行
@Scheduled(cron ="0 55 20 ? * *")
public void fixTimeExecution()throws Exception{
System.out.println("在指定时间执行"+dateFormat.format(new Date()));
Thread.sleep(10000);
}
结果可见20:54:59 下次执行时间变成了20:55:10, 正好是第二个任务执行完的时间,由此可见 @Scheduled默认是单线程
【参考】
《JavaEE开发的颠覆者 SpringBoot实战》