20220516 Core Features - 7. Task Execution and Scheduling

前言

文档地址

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

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

如果要创建自定义的执行器或调度器,上下文提供了 TaskExecutorBuilder bean 和 TaskSchedulerBuilder bean。

参考源码:

  • org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
posted @ 2022-06-08 07:52  流星<。)#)))≦  阅读(28)  评论(0编辑  收藏  举报