Каков размер пула планировщика по умолчанию в spring -boot?
Я использую аннотацию spring-boot
и @Scheduled
для выполнения некоторых задач.
Как узнать, что размер пула по умолчанию для запланированных задач по умолчанию используется в spring -boot?
Причина: следующий класс не выполняет задания параллельно, а один за другим. Может быть, по умолчанию настроен только один исполнитель потока?
@Service
public class ZipFileTesterAsync {
@Scheduled(fixedDelay = 60000, initialDelay = 500)
public void run() throws Exception {
System.out.println("import 1");
TimeUnit.MINUTES.sleep(1);
System.out.println("import 1 finished");
}
@Scheduled(fixedDelay = 60000, initialDelay = 1000)
public void run2() throws Exception {
System.out.println("import 2");
TimeUnit.MINUTES.sleep(1);
}
}
Результат: второе задание выполняется после первого завершения.
Ответы
Ответ 1
Да, все методы @Scheduled
по умолчанию используют один поток.
Это поведение можно переопределить, определяя @Configuration
, например:
@Configuration
public class SchedulingConfigurerConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(100);
taskScheduler.initialize();
taskRegistrar.setTaskScheduler(taskScheduler);
}
}
Этот пример гарантирует, что все методы @Scheduled
совместно используют пул потоков размером 100.
Ответ 2
очень простой способ сделать это:
@Configuration
public class ScheduleConfig {
ScheduleConfig(ThreadPoolTaskScheduler threadPoolTaskScheduler) {
threadPoolTaskScheduler.setPoolSize(10);
}
}