在我们的项目中,我们使用的是Spring Boot 2.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 Boot配置中:
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(5);
return taskScheduler;
}
这是ThreadPoolTaskScheduler源代码的链接。
关于java - Spring Boot @Scheduled是同步的还是异步的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55280332/