Java Spring Boot@计划是同步的还是异步的?

Java Spring Boot@计划是同步的还是异步的?,java,spring-boot,cron,Java,Spring Boot,Cron,在我们的项目中,我们使用SpringBoot2.1.3.Release,对于调度程序作业,我们在方法级别使用@Scheduled @Scheduled(fixedRate = 1000) public void fixedRateSchedule() { System.out.println( "Fixed rate task - " + System.currentTimeMillis() / 1000); } 固定速率不会等待上一个任务完成 @Scheduled(fix

在我们的项目中,我们使用SpringBoot2.1.3.Release,对于调度程序作业,我们在方法级别使用@Scheduled

@Scheduled(fixedRate = 1000)
public void fixedRateSchedule() {
    System.out.println(
      "Fixed rate task - " + System.currentTimeMillis() / 1000);
}
固定速率不会等待上一个任务完成

@Scheduled(fixedDelay = 1000)
    public void fixedDelaySchedule() {
        System.out.println(
          "Fixed delay task - " + System.currentTimeMillis() / 1000);
    }
fixedDelay任务始终等待上一个任务完成

@Scheduled(cron = "0 0/5 * * * ?")
        public void fixedDelaySchedule() {
            System.out.println(
              "cron  task - " + System.currentTimeMillis() / 1000);
        }

上面的cron将每五分钟执行一次,我的问题是:@scheduled cron是否会在触发下一个作业之前等待上一个任务完成?

@scheduled
方法是异步执行的,但默认情况下Spring Boot使用大小为1的线程池,因此每个方法将一次执行一个

要更改此设置,请将以下内容添加到Spring引导配置中:

@Bean
public TaskScheduler taskScheduler() {
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.setPoolSize(5);
    return taskScheduler;
}

这里有一个指向源代码的链接。

@Scheduled方法默认使用大小为1的线程池,因此一次只执行一个方法。您可以通过配置TaskScheduler bean来更改此设置。@ck1:所以我的方法应该在上一个任务完成后执行,对吗?没错,它不会同时执行。