@EnableScheduling

通过@EnableScheduling注解启用定时任务。

@Scheduled

默认单线程,串行执行任务,即如果第一个任务没有执行完,则第二个任务阻塞。

  1. fixedDelay:上次的任务结束的时候开始计时;
  2. fixedRate:上次的任务开始的时候开始计时;
  3. cron:通过cron表达式触发定时任务。

    ThreadPoolTaskScheduler

  4. 定义一个线程池ThreadPoolTaskScheduler,并通过@Bean注解装配;

  5. 通过@Bean注解的name属性可以定义线程池的名称;
  6. 定义线程池后仍然是串行执行任务


  1. @Bean(name = "xxx-task")
  2. public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
  3. ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
  4. taskScheduler.setPoolSize(Math.max(Runtime.getRuntime().availableProcessors() / 2, 2));
  5. return taskScheduler;
  6. }

@EnableAsync和@Async

  1. 类需要加上@EnableAsync注解;
  2. 方法需要加上@Async注解;
  3. 此时并行执行任务。