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

J.J*_*eam 3 java spring database-connection threadpool spring-boot

我有一个 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 ... = ... - 有什么区别?

M. *_*num 6

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

Tomcat 请求处理线程

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

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

任务执行的线程数

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

连接池属性

最后为您的连接池指定连接数(Hikari 的默认值为 10!)。使用spring.datasource命名空间属性和专门的一个连接池(默认为光速所以鸡舍spring.datasource.hikarispring.datasource.tomcat是2.0之前默认使用的春天启动Tomcat的JDBC连接池)。因此,spring.datasource.hikari.maximum-pool-size将管理设置为最大线程数。

笔记

它们彼此之间没有任何关系,也应该相互混淆(恕我直言,参考指南中已经清楚地表明,它们各自具有不同的用途)。有关常用属性的列表,请参阅Spring Boot 参考指南的附录 A。