spring中ThreadPoolTask​​Executor默认的池类型是哪种

Dol*_*hin 3 java spring spring-async

我读过代码但没有找到ThreadPoolTask​​Executor的默认池类型。ThreadPoolTask​​Executor的默认线程池是什么?newFixedThreadPool 还是 newCachedThreadPool?

Ken*_*han 5

对于纯spring应用,默认TaskExecutor会按照以下顺序解析(源码在这里):

  1. 那个豆子就是org.springframework.core.task.TaskExecutor
  2. 豆子的java.util.concurrent.Executor名字和名字 taskExecutor
  3. SimpleAsyncTaskExecutor

所以如果你不配置任何东西,默认情况下它将使用SimpleAsyncTaskExecutor内部不使用JDK的ThreadPoolExecutor来创建线程。因此没有线程池,并且将为每个异步调用创建一个新线程。

对于 spring-boot 应用程序,它将自动配置一个ThreadPoolTaskExecutorbean(文档)。由于ThreadPoolTaskExecutor是 的一种类型org.springframework.core.task.TaskExecutor,因此将根据上述顺序将其用作默认值。

ThreadPoolTaskExecutor在内部使用 JDK 的ThreadPoolExecutor,但既不使用它newFixedThreadPool(),也不newCachedThreadPool()创建它ThreadPoolExecutor。相反,它直接调用其构造函数来创建,然后根据应用程序属性配置其设置。(源代码此处