SpringBoot之SpringTask定时任务调度器

第一步开启任务调度,定时任务

启动类上添加注解 @EnableScheduling

@SpringBootApplication
@EnableScheduling//开启任务调度,定时任务
public class SpringTaskApplication {

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

第二步配置定时任务并行化配置类

注意:在这个配置类上加上了@EnableScheduling注解,则启动类上就不用再加了


@Configuration
@EnableScheduling//在这开启了启动类上就不用再写了
public class AsyncTaskConfig implements SchedulingConfigurer,AsyncConfigurer {

  //线程池线程数量     
   private int corePoolSize = 5;

   @Bean
    public ThreadPoolTaskScheduler taskScheduler(){
      ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
      scheduler.initialize();//初始化线程池
      scheduler.setPoolSize(corePoolSize);//线程池容量
      return scheduler;

    }

  @Override
  public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    taskRegistrar.setTaskScheduler(taskScheduler());
  }

  @Override
  public Executor getAsyncExecutor() {
     Executor executor = taskScheduler();
     return executor;
  }

  @Override
  public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    return null;
  }
}

第三步写定时任务

@Component
public class SpringTaskTestController {

  @Scheduled(cron = "0/3 * * * * *") //每隔三面执行一次任务
  //@Scheduled(fixedRate = 5000) //上次执行开始时间后五秒执行
  //@Scheduled(fixedDelay = 5000)  //上次执行任务完毕后五秒执行
  //@Scheduled(initialDelay = 3000,fixedDelay = 5000) //第一次延迟三秒,以后每隔五秒执行一次
  public void testTask1(){

    System.out.println("开始1");
    try{
    Thread.sleep(5000);
    }catch (Exception e){
      System.out.println("错误");
    }
    System.out.println("结束1");

  }
  @Scheduled(cron = "0/3 * * * * *")
  public void testTask2(){

    System.out.println("开始2");
    try{
      Thread.sleep(5000);
    }catch (Exception e){
      System.out.println("错误");
    }
    System.out.println("结束2");

  }
  @Scheduled(cron = "0/3 * * * * *")
  public void testTask3(){

    System.out.println("开始3");
    try{
      Thread.sleep(5000);
    }catch (Exception e){
      System.out.println("错误");
    }
    System.out.println("结束3");

  }
}

启动启动类后会发现定时任务为异步并行化执行,如不配置上述配置类,则默认为串行化,第一个任务结束之后开始调用第二个任务。

corn表达式

cron表达式包括6部分:
秒(0~59)
分钟(0~59)
小时(0~23)
月中的天(1~31)
月(1~12)
周中的天 (填写MON,TUE,WED,THU,FRI,SAT,SUN,或数字1~7 1表示MON,依次类推)
(月中的天跟周中的天就存在不确定关系。所以其中一个确认的另一个为"?")
特殊字符介绍:
“/”字符表示指定数值的增量
“*”字符表示所有可能的值
“-”字符表示区间范围
“,” 字符表示列举
“?”字符仅被用于月中的天和周中的天两个子表达式,表示不指定值 ?
例子:
0/3 * * * * * 每隔3秒执行
0 0/5 * * * * 每隔5分钟执行
0 0 0 * * * 表示每天0点执行
0 0 12 ? * WEN 每周三12点执行(月中的天跟周中的天就存在不确定关系。所以其中一个确认的另一个为"?")
0 15 10 ? * MON-FRI 每月的周一到周五10点 15分执行(月中的天跟周中的天就存在不确定关系。所以其中一个确认的另一个为"?")
0 15 10 ? * MON,FRI 每月的周一和周五10点 15分执行 (月中的天跟周中的天就存在不确定关系。所以其中一个确认的另一个为"?")

你可能感兴趣的:(定时任务)