Якщо в контексті нема біна Executor, Spring Boot автоматично конфігурує ThreadPoolTaskExecutor з адекватними значеннями за замовчуванням, які можуть бути автоматично пов'язані з асинхронним виконанням завдань (анотація @ EnableAsync) та асинхронною обробкою запитів у Spring MVC.

Якщо ти визначиш кастомний Executor у контексті, при звичайному виконанні завдання (тобто з анотацією @EnableAsync) він використовуватиметься прозоро, але засоби підтримки Spring MVC не будуть налаштовані, тому що для цього потрібна реалізація AsyncTaskExecutor (з ім'ям applicationTaskExecutor). Залежно від вашої цільової організації, можна змінити Executor на ThreadPoolTaskExecutor або визначити як ThreadPoolTaskExecutor, так і AsyncConfigurer, що обгортають твій кастомний Executor.

Автоконфігурований TaskExecutorBuilder дозволяє легко створювати екземпляри, що відтворюють те, що автоконфігурація робить за замовчуванням.

Пул потоків використовує 8 основних потоків, число яких може збільшуватися та зменшуватися залежно від навантаження. Ці параметри за замовчуванням можна точно налаштувати за допомогою простору імен spring.task.execution, як показано в наведеному нижче прикладі:

Properties
spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s
Yaml
spring:
  task:
    execution:
      pool:
        max-size: 16
        queue-capacity: 100
        keep-alive: "10s"

Цей код змінює пул потоків для використання черги з обмеженням на довжину, тому якщо черга заповнюється (100 завдань), пул потоків збільшується до максимальних 16 потоків. Скорочення пулу відбувається агресивніше, оскільки потоки відновлюються, якщо вони простоюють протягом 10 секунд (а не 60 секунд за замовчуванням).

Планувальник ThreadPoolTaskScheduler також може бути автоматично налаштований, якщо його необхідно пов'язати з виконанням спланованих завдань (наприклад, за допомогою анотації @EnableScheduling). Пул потоків за замовчуванням використовує один потік, але його параметри можна точно налаштувати за допомогою простору імен spring.task.scheduling, як показано в наступному прикладі:

Properties
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
Yaml
spring:
  task:
    scheduling:
      thread-name-prefix: "scheduling-"
      pool:
        size: 2

Біни TaskExecutorBuilder та TaskSchedulerBuilder доступні в контексті, якщо необхідно створити кастомний виконавець або планувальник.