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 在上下文中都可用。