以spring官方文档为基础,官方地址:Spring Boot_Task Execution and Scheduling
-
如果上下文没有Executor bean,那么 Spring Boot 会默认配置(带有默认值的)ThreadPoolTaskExecutor,它可以自动关联到异步任务执行(@EnableAsync)和Spring MVC异步请求处理。
-
如果已经在上下文中定义了一个自定义Executor,常规任务执行(即@EnableAsync)将透明地使用它,但Spring MVC支持将不会被配置,因为它需要一个AsyncTaskExecutor实现(名为applicationTaskExecutor)。根据目标安排,可将Executor更改为ThreadPoolTaskExecutor或同时定义ThreadPoolTaskExecutor和AsyncConfigurer来包装自定义Executor。
自动配置的TaskExecutorBuilder允许创建实例,重现默认情况下自动配置的功能。
线程池使用8个核心线程,它们可以根据负载增长和收缩。这些默认设置可以使用spring.task. execute命名空间进行微调,如下所示:
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秒)时,会回收线程,因此池的收缩会更激进。
ThreadPoolTaskScheduler也可以被自动配置,如果需要关联到计划任务执行(例如使用@ enablesscheduler)。线程池默认使用一个线程,它的设置可以使用spring.task.scheduling命名空间进行微调,如下所示:
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
如果需要创建自定义执行器或调度器,那么TaskExecutorBuilder bean和TaskSchedulerBuilder bean都可以在上下文中使用。