Якщо в контексті нема біна Executor
, Spring Boot автоматично конфігурує
ThreadPoolTaskExecutor
з адекватними значеннями за замовчуванням, які можуть бути автоматично пов'язані
з асинхронним виконанням завдань (анотація @ EnableAsync
) та асинхронною обробкою запитів у Spring MVC.
Якщо ти визначиш кастомний Executor
у контексті, при звичайному виконанні завдання (тобто з
анотацією @EnableAsync
) він використовуватиметься прозоро, але засоби підтримки Spring MVC не
будуть налаштовані, тому що для цього потрібна реалізація AsyncTaskExecutor
(з ім'ям applicationTaskExecutor
).
Залежно від вашої цільової організації, можна змінити Executor
на
ThreadPoolTaskExecutor
або визначити як ThreadPoolTaskExecutor
, так і AsyncConfigurer
,
що обгортають твій кастомний Executor
.
Автоконфігурований TaskExecutorBuilder
дозволяє легко створювати екземпляри, що відтворюють те, що
автоконфігурація робить за замовчуванням.
Пул потоків використовує 8 основних потоків, число яких може збільшуватися та зменшуватися залежно від навантаження.
Ці параметри за замовчуванням можна точно налаштувати за допомогою простору імен spring.task.execution
,
як показано в наведеному нижче прикладі:
spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s
spring:
task:
execution:
pool:
max-size: 16
queue-capacity: 100
keep-alive: "10s"
Цей код змінює пул потоків для використання черги з обмеженням на довжину, тому якщо черга заповнюється (100 завдань), пул потоків збільшується до максимальних 16 потоків. Скорочення пулу відбувається агресивніше, оскільки потоки відновлюються, якщо вони простоюють протягом 10 секунд (а не 60 секунд за замовчуванням).
Планувальник ThreadPoolTaskScheduler
також може бути автоматично налаштований, якщо його необхідно
пов'язати з виконанням спланованих завдань (наприклад, за допомогою анотації @EnableScheduling
). Пул
потоків за замовчуванням використовує один потік, але його параметри можна точно налаштувати за допомогою простору
імен spring.task.scheduling
, як показано в наступному прикладі:
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
spring:
task:
scheduling:
thread-name-prefix: "scheduling-"
pool:
size: 2
Біни TaskExecutorBuilder
та TaskSchedulerBuilder
доступні в контексті, якщо необхідно
створити кастомний виконавець або планувальник.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ