Spring-Boot:如何设置JDBC池属性,如最大连接数?

Spring-Boot是一个非常棒的工具,但是对于更高级的configuration,文档有点稀疏。 我如何设置像我的数据库连接池的最大大小的属性?

Spring-Boot本身就支持tomcat-jdbcHikariCPCommons DBCP ,它们都是以同样的方式configuration的吗?

事实certificate,设置这些configuration属性是非常简单的,但官方文档更加通用,所以在专门search连接池configuration信息时可能很难find。

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

 spring.datasource.maxActive=5 

如果您愿意,您还可以使用以下内容:

 spring.datasource.max-active=5 

你可以用这种方式设置任何连接池属性。 这里是tomcat-jdbc支持的属性的完整列表 。

为了更清楚地了解它的工作原理,您需要深入了解Spring-Boot代码。

Spring-Boot像这样构造DataSource( 见这里的第102行):

 @ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX) @Bean public DataSource dataSource() { DataSourceBuilder factory = DataSourceBuilder .create(this.properties.getClassLoader()) .driverClassName(this.properties.getDriverClassName()) .url(this.properties.getUrl()) .username(this.properties.getUsername()) .password(this.properties.getPassword()); return factory.build(); } 

DataSourceBuilder负责通过检查类path上的一系列已知类的每一个来确定使用哪个池库。 然后构造DataSource并将其返回给dataSource()函数。

在这一点上,魔术踢在使用@ConfigurationProperties 。 这个注释告诉Spring查找带有前缀CONFIGURATION_PREFIX (即spring.datasource )的属性。 对于以该前缀开头的每个属性,Spring将尝试使用该属性调用DataSource上的setter。

Tomcat DataSource是DataSourceProxy的扩展,它有setMaxActive()方法。

这就是你的spring.datasource.maxActive=5得到正确应用!

其他连接池呢?

我还没有尝试过,但是如果您使用的是其他Spring-Boot支持的连接池(当前是HikariCP或Commons DBCP),您应该可以使用相同的方式设置属性,但是您需要查看项目文件知道什么是可用的。

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

例如,如果你使用的是tomcat-jdbc:

 spring.datasource.tomcat.max-wait=10000 

你可以在这里find解释

 spring.datasource.max-wait=10000 

这已经没有效果了。

不同的连接池有不同的configuration。

例如Tomcat(默认)期望:

 spring.datasource.ourdb.url=... 

而HikariCP将会很满意:

 spring.datasource.ourdb.jdbc-url=... 

我们可以同时满足两种模板configuration:

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

没有属性来定义连接池提供程序。

看看源DataSourceBuilder.java

如果Tomcat,HikariCP或Commons DBCP位于类path中,则会select其中一个(首先按照Tomcat的顺序)。

…所以,我们可以使用这个mavenconfiguration(pom.xml)轻松地replace连接池提供者:

  <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency>