7.8. 任务执行与调度

在上下文中没有Executorbean 的情况下,Spring Boot 自动配置一个具有合理的默认值的ThreadPoolTaskExecutor,这些默认值可以自动关联到异步任务执行 ( @EnableAsync) 和 Spring MVC 异步请求处理。

如果您在上下文中定义了自定义Executor,则常规任务执行(即@EnableAsync)将透明地使用它,但配置不会支持 Spring MVC ,因为它需要对AsyncTaskExecutor进行实现(名为applicationTaskExecutor)。根据您的目标安排,您可以将您的Executor更改为 ThreadPoolTaskExecutor或定义 ThreadPoolTaskExecutorAsyncConfigurer包装自定义的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

如果需要创建自定义执行程序或调度程序,则TaskExecutorBuilderbean 和TaskSchedulerBuilderbean 在上下文中都可用。

最后更新于