20220516 Core Features - 7. Task Execution and Scheduling
前言
在上下文中没有Executor bean的情况下,Spring Boot 会使用合理的默认值自动配置一个 ThreadPoolTaskExecutor ,这些默认值可以自动关联到 异步任务执行( @EnableAsync )和 Spring MVC 异步请求处理。
如果您在上下文中定义了一个自定义
Executor,则常规任务执行(即@EnableAsync)将透明地使用它,但由于需要AsyncTaskExecutor实现(名为applicationTaskExecutor),因此不会配置 Spring MVC 支持。根据你的目标安排,你可以改变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 秒)时,它们将被回收。
如果需要与计划的任务执行( @EnableScheduling )关联,也可以自动配置 ThreadPoolTaskScheduler 。线程池默认使用一个线程,可以使用 spring.task.scheduling 名称空间对这些设置进行微调。
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
如果要创建自定义的执行器或调度器,上下文提供了 TaskExecutorBuilder bean 和 TaskSchedulerBuilder bean。
参考源码:
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
浙公网安备 33010602011771号