Java SpringBoot:如何设置JDBC池属性,如最大连接数?

Java SpringBoot:如何设置JDBC池属性,如最大连接数?,java,spring,jdbc,spring-boot,tomcat-jdbc,Java,Spring,Jdbc,Spring Boot,Tomcat Jdbc,SpringBoot是一个非常棒的工具,但是当涉及到更高级的配置时,文档有点稀疏。如何设置数据库连接池的最大大小等属性 Spring Boot支持tomcat jdbc、HikariCP和Commons DBCP本机配置它们的配置方式是否相同? 事实证明,设置这些配置属性非常简单,但更一般,因此在专门搜索连接池配置信息时可能很难找到 要设置tomcat jdbc的最大池大小,请在.properties或.yml文件中设置此属性: spring.datasource.maxActive=5 如果

SpringBoot是一个非常棒的工具,但是当涉及到更高级的配置时,文档有点稀疏。如何设置数据库连接池的最大大小等属性

Spring Boot支持
tomcat jdbc
HikariCP
Commons DBCP
本机配置它们的配置方式是否相同?

事实证明,设置这些配置属性非常简单,但更一般,因此在专门搜索连接池配置信息时可能很难找到

要设置tomcat jdbc的最大池大小,请在.properties或.yml文件中设置此属性:

spring.datasource.maxActive=5
如果愿意,还可以使用以下选项:

spring.datasource.max active=5
您可以通过这种方式设置任何连接池属性

为了更全面地理解它是如何工作的,您需要深入研究一下Spring引导代码

Spring Boot构造的数据源如下(,第102行):

@ConfigurationProperties(前缀=DataSourceAutoConfiguration.CONFIGURATION\u前缀)
@豆子
公共数据源数据源(){
DataSourceBuilder工厂=DataSourceBuilder
.create(this.properties.getClassLoader())
.driverClassName(此.properties.getDriverClassName())
.url(this.properties.getUrl())
.username(this.properties.getUsername())
.password(this.properties.getPassword());
返回factory.build();
}
DataSourceBuilder负责通过检查类路径上的一系列已知类中的每一个来确定要使用哪个池库。然后构造数据源并将其返回到
DataSource()
函数

此时,magic开始使用
@ConfigurationProperties
。此注释告诉Spring查找前缀为
CONFIGURATION\u prefix
(即
Spring.datasource
)的属性。对于以该前缀开头的每个属性,Spring将尝试调用具有该属性的数据源上的setter

Tomcat数据源是的扩展,它具有方法
setMaxActive()

这就是您的
spring.datasource.maxActive=5
被正确应用的方式

其他连接池呢 我没有尝试过,但是如果您使用的是其他支持Spring Boot的连接池(当前为HikariCP或Commons DBCP),您应该能够以相同的方式设置属性,但是您需要查看项目文档以了解可用的连接池。

不同的连接池具有不同的配置。 例如,Tomcat(默认)期望:

HikariCP会很高兴:

spring.datasource.ourdb.jdbc-url=...
我们可以在没有样板配置的情况下满足这两个要求:

spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}

没有用于定义连接池提供程序的属性。 看一看源代码

如果Tomcat、HikariCP或Commons DBCP位于类路径上,则将选择其中一个(按照Tomcat优先的顺序)

。。。因此,我们可以使用此maven配置(pom.xml)轻松替换连接池提供程序:


org.springframework.boot
弹簧靴启动器jdbc
org.apache.tomcat
TomcatJDBC
com.zaxxer
希卡里普

在当前版本的Spring Boot(1.4.1.RELEASE)中,每个池数据源实现都有自己的属性前缀

例如,如果您使用的是tomcat jdbc:

spring.datasource.tomcat.max-wait=10000
你可以找到解释


这不再有效。

在spring boot 2.x中,您需要引用特定于提供程序的属性


默认情况下,hikari可以根据应用程序类型/大小/负载/用户数使用
spring.datasource.hikari.maximum pool size

进行设置。等等-您可以将以下内容作为生产属性

spring.datasource.tomcat.initial-size=50
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.max-idle=150
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true

我发现使用不同的数据源提供程序更好,比如BoneCP或C3P0
-Dspring.DataSource.tomcat.initial size=10
(默认值为10)有明确的文档说明(碰巧):。您还可以启动应用程序并查看/configprops(带执行器)。文档的问题在于,所有数据源实现的属性都略有不同(您只是绑定到一个JavaBean)。感谢您指出@DaveSyer,搜索连接池相关关键字时,搜索引擎优化不是很友好。我同意不同的连接池有不同的配置,这就是为什么我添加了一个章节。我将更新答案。查看其他答案,如Daniel和wildloop的。在以后的spring引导版本中,许多设置要求您设置特定于提供程序的设置。e、 g.
spring.datasource.tomcat.max active
spring.datasource.hikari.max pool size
。仅在我的情况下
spring.datasource.maxActive=1
有效。这一行
spring.datasource.max active=1
对我不起作用。Spring启动版本
2.2.2.RELEASE
添加
Spring.datasource.tomcat.max active=5
Spring.datasource.tomcat.max idle=5
对我来说已经足够了,谢谢!
spring.datasource.tomcat.max-wait=10000
spring.datasource.max-wait=10000
spring.datasource.tomcat.initial-size=50
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.max-idle=150
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true