7.8. 任务执行与调度
在上下文中没有Executor
bean 的情况下,Spring Boot 自动配置一个具有合理的默认值的ThreadPoolTaskExecutor
,这些默认值可以自动关联到异步任务执行 ( @EnableAsync
) 和 Spring MVC 异步请求处理。
如果您在上下文中定义了自定义Executor
,则常规任务执行(即@EnableAsync
)将透明地使用它,但配置不会支持 Spring MVC ,因为它需要对AsyncTaskExecutor
进行实现(名为applicationTaskExecutor
)。根据您的目标安排,您可以将您的Executor
更改为 ThreadPoolTaskExecutor
或定义 ThreadPoolTaskExecutor
和AsyncConfigurer
包装自定义的Executor
。自动配置TaskExecutorBuilder
允许您轻松创建实例来重现自动配置默认执行的操作。
线程池使用8个核心线程,可以根据负载增长和收缩。这些默认设置可以使用命名空间进行微调spring.task.execution
,如以下示例所示:
这将线程池更改为使用有界队列,以便当队列已满(100 个任务)时,线程池增加到最多 16 个线程。由于线程在空闲 10 秒(而不是默认情况下为 60 秒)时被回收,因此池的收缩更具侵略性。
如果需要与计划的任务执行相关联(例如使用@EnableScheduling
),也可以自动配置ThreadPoolTaskScheduler
。线程池默认使用一个线程,可以使用命名空间spring.task.scheduling
微调其设置,如下例所示:
如果需要创建自定义执行程序或调度程序,则TaskExecutorBuilder
bean 和TaskSchedulerBuilder
bean 在上下文中都可用。
最后更新于