server.tomcat.max-threads VS corePoolSize VS spring.datasource.tomcat.max
Posted
技术标签:
【中文标题】server.tomcat.max-threads VS corePoolSize VS spring.datasource.tomcat.max【英文标题】: 【发布时间】:2019-06-05 04:07:56 【问题描述】:我有一个 Spring Boot REST 异步应用程序,想要调整:
-
来自客户端的连接线程(希望 REST 请求并行)
我的服务层中@Async 方法的线程数
与数据库的连接池
浏览文档和网站发现了可能性:
corePoolSize value=... VS server.tomcat.max-threads = ... - 有什么区别?
spring.datasource.hikari.maximum-pool-size= ... VS spring.datasource.tomcat.max... = ... - 有什么区别?
【问题讨论】:
【参考方案1】:假设您使用的是 Spring Boot 2.1 并且没有更改默认值(使用 Tomcat 作为嵌入式容器,Hikari 作为连接池)。
Tomcat 请求处理线程
要修改线程数(tomcat 默认已经使用 200,为什么还要更改它!)使用 server.tomcat
命名空间中的属性(这些是特定于 Tomcat 的!所以使用 server.tomcat.max-threads
来控制请求处理的数量。
要限制并发 HTTP 连接的数量,请使用 server.tomcat.max-connections
(默认值 10000)。这基本上是请求处理线程用来从中挑选/窃取工作的处理队列。
任务执行的线程数
为了控制 Spring Boot 2.1 中默认创建的 TaskExecutor
使用的线程数,请使用 spring.task.execution
命名空间中的属性。所以使用spring.task.execution.pool.max-threads
来设置@Async
使用的最大线程数。 spring.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 连接池,在 2.0 之前的 Spring Boot 上用作默认值)。所以设置spring.datasource.hikari.maximum-pool-size
来管理最大线程数。
注意
它们彼此没有任何关系,也应该相互混淆(恕我直言,参考指南中已经清楚地说明了它们各自的用途不同)。请参阅 Spring Boot 参考指南的 Appendix A 以获取常用属性列表。
【讨论】:
是Spring Boot使用的默认连接池(我的回答第一行有提到)。 连接池是否仅用于数据库连接?它会影响哪些其他连接?可以单独为DB和其他连接配置吗?以上是关于server.tomcat.max-threads VS corePoolSize VS spring.datasource.tomcat.max的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot max-threads设置方式(2.3 版本以后)
springboot x.x.x RELEASE不同版本的差异
SpringBoot 内置 Tomcat 线程数优化配置,你学会了吗?