Подтвердить что ты не робот

Каков размер пула планировщика по умолчанию в 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);
    }
}

Результат: второе задание выполняется после первого завершения.

4b9b3361

Ответ 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);
  }
}