41. 任务执行和计划

在上下文中没有TaskExecutor bean 的情况下,Spring Boot 会使用合理的默认值自动配置ThreadPoolTaskExecutor,这些默认值可以自动与异步任务执行(@EnableAsync)和 Spring MVC 异步请求处理相关联。

线程池使用 8 个核心线程,这些线程可以根据负载增长和收缩。可以使用spring.task.execution名称空间对这些默认设置进行微调,如以下示例所示:

spring.task.execution.pool.max-threads=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s

这会将线程池更改为使用有界队列,以便当队列已满(100 个任务)时,线程池最多增加到 16 个线程。当线程空闲 10 秒(而不是默认情况下的 60 秒)时,回收线程会使池的收缩更加激进。

如果需要将ThreadPoolTaskScheduler与计划的任务执行(@EnableScheduling)关联,也可以对其进行自动配置。默认情况下,线程池使用一个线程,可以使用spring.task.scheduling名称空间对这些设置进行微调。

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