SpringBoot定时任务入门

SpringBoot定时任务就两个注解,加上后,随着SpringBoot启动,定时任务会自动运行

可以通过在定时任务中打印log观察定时任务的运行。

1. 主函数配置注解

@SpringBootApplication
@EnableAsync          // 开启异步
@EnableScheduling     // 开启定时任务
public class DataSyncApplication {

   public static void main(String[] args) {
       SpringApplication.run(DataSyncApplication.class, args);
  }

}

2. 单线程阻塞 - 定时任务

  • crontab表达式学习[见cron章节]
  • 默认单个线程,阻塞方式
@Scheduled(cron = "0/1 * * * * ?")
public void realDataSyncScheduled1(){
   // doSth
}

3. 异步 - 定时任务

若定时任务内执行时间太长,将会影响下一次执行的启动

比如执行需要用5秒,设置的每秒执行一次,实际上就会5秒执行一次

因为定时任务默认是阻塞方式,这时需要加上异步标志

@Async
@Scheduled(cron = "0/1 * * * * ?")
public void realDataSyncScheduled1(){
   // doSth
}

这时就会单线程异步执行,只要单核没用满,就不会出现影响下一次定时任务执行的情况

Async用的默认线程池策略,这个不太好,最好自定义多线程异步定时任务

4. 自定义多线程异步 - 定时任务

若任务是计算密集操作,此时异步也不管用,因为单核只能用1个CPU,这个CPU被用满了就只能等了

所以需要开启多线程异步

需要配置一下Async的线程池,默认也会给,一般最好自己配