Spring Boot: выполнение задач и планирование

При отсутствии компонента 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

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

ThreadPoolTaskScheduler также можно настроить автоматически, если необходимо связать его с выполнением запланированного задания (@EnableScheduling). Пул потоков по умолчанию использует один поток, и эти параметры можно настроить с помощью пространства имен spring.task.scheduling.

И bean-компонент TaskExecutorBuilder, и bean-компонент TaskSchedulerBuilder становятся доступными в контексте, если необходимо создать пользовательского исполнителя или планировщика.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки