Spring——@Scheduled

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执行结果


image

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实战》

你可能感兴趣的:(Spring——@Scheduled)