Spring Boot @Scheduled 是同步还是异步?

PS *_*mar 3 java cron spring-boot

在我们的项目中,我们使用 Spring Boot 2.1.3.Release,对于调度程序作业,我们在方法级别使用了 @Scheduled。

@Scheduled(fixedRate = 1000)
public void fixedRateSchedule() {
    System.out.println(
      "Fixed rate task - " + System.currentTimeMillis() / 1000);
}
Run Code Online (Sandbox Code Playgroud)

固定速率不等待前一个任务完成。

@Scheduled(fixedDelay = 1000)
    public void fixedDelaySchedule() {
        System.out.println(
          "Fixed delay task - " + System.currentTimeMillis() / 1000);
    }
Run Code Online (Sandbox Code Playgroud)

fixedDelay 任务总是等到前一个任务完成。

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

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

ck1*_*ck1 7

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

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

@Bean
public TaskScheduler taskScheduler() {
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.setPoolSize(5);
    return taskScheduler;
}
Run Code Online (Sandbox Code Playgroud)

这是ThreadPoolTask​​Scheduler源代码的链接。