server.tomcat.max-线程 VS corePoolSize VS spring.datasource.tomcat.max

server.tomcat.max-threads VS corePoolSize VS spring.datasource.tomcat.max

我有一个 Spring Boot REST 异步应用程序,想要调整:

  1. 来自客户端的连接线程(希望 REST 请求并行进行)
  2. 我的服务层中@Async 方法的线程数
  3. 数据库连接池

浏览文档和站点发现的可能性:

corePoolSize value=... VS server.tomcat.max-threads = ... - 有什么区别?

spring.datasource.hikari.maximum-pool-size= ... VS spring.datasource.tomcat.max... = ... - 有什么区别?

假设您正在使用 Spring Boot 2.1 并且没有更改默认设置(使用 Tomcat 作为嵌入式容器,使用 Hikari 作为连接池)。

Tomcat 请求处理线程

要修改线程数(tomcat 默认情况下已经使用 200,所以为什么需要更改它!)使用 server.tomcat 命名空间中的属性(那些特定于 Tomcat!。所以用server.tomcat.max-threads来控制请求处理的数量。

要限制并发 HTTP 连接数,请使用 server.tomcat.max-connections(默认值 10000)。这基本上是请求处理线程用来 pick/steal 工作的处理队列。

任务执行的线程数

要控制 Spring Boot 2.1 中默认创建的 TaskExecutor 使用的线程数,请使用 spring.task.execution 命名空间中的属性。因此,使用 spring.task.execution.pool.max-threads 设置最大线程数以用于 @Asyncspring.task.execution.pool.core-size 控制核心(最小)池大小。通过 spring.task.execution.pool.queue-capacity 增加 max-threads 属性 而不限制队列大小没有任何效果。默认队列大小是无限的,任何事情都不会导致线程数量增加到超过 core-size

连接池属性

最后为您的连接池指定连接(Hikari 的默认值为 10!)。使用 spring.datasource 命名空间属性,特别是连接池的属性(默认为 Hikari,因此 spring.datasource.hikari 中的 spring.datasource.tomcat 用于 Tomcat JDBC在 Spring Boot before 2.0 上默认使用的连接池)。所以设置 spring.datasource.hikari.maximum-pool-size 来管理最大线程数。

备注

它们彼此没有任何关系,也应该相互混淆(恕我直言,这在参考指南中已经很清楚,每个都有不同的用途)。有关常用属性列表,请参阅 Spring 引导参考指南的 Appendix A