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

时间:2019-03-21 12:22:03

标签: java spring-boot cron

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

module.exports =  webworkerConfig;

固定汇率不会等待上一个任务完成。

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

fixedDelay任务始终等待直到上一个任务完成。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

这里是ThreadPoolTaskScheduler的源代码的链接。