Spring-Boot是一个非常棒的工具,但在更高级的配置方面文档有些稀少。我该如何设置像数据库连接池最大大小这样的属性?
Spring-Boot本地支持tomcat-jdbc
,HikariCP
和Commons DBCP
,它们的配置方式都相同吗?
Spring-Boot是一个非常棒的工具,但在更高级的配置方面文档有些稀少。我该如何设置像数据库连接池最大大小这样的属性?
Spring-Boot本地支持tomcat-jdbc
,HikariCP
和Commons DBCP
,它们的配置方式都相同吗?
原来设置这些配置属性是相当简单的,但官方文档比较通用,因此在专门搜索连接池配置信息时可能会很难找到。
要为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负责通过检查类路径上的一系列已知类来确定使用哪个连接池库。然后构建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.datasource.tomcat.max-active
或spring.datasource.hikari.maximum-pool-size
。 - Dan Tannerspring.datasource.maxActive=1
起作用。这一行 spring.datasource.max-active=1
对我无效。Spring Boot 版本为 2.2.2.RELEASE
。 - Rafael在当前版本的Spring-Boot(1.4.1.RELEASE)中,每个池化数据源实现都有其属性的前缀。
例如,如果您正在使用tomcat-jdbc:
spring.datasource.tomcat.max-wait=10000
你可以在这里找到解释。spring.datasource.max-wait=10000
这已经没有任何影响了。
在Spring Boot 2.x中,您需要引用特定于提供程序的属性。
默认情况下,Hikari可以使用spring.datasource.hikari.maximum-pool-size
进行设置。
例如,Tomcat(默认)期望:
spring.datasource.ourdb.url=...
spring.datasource.ourdb.jdbc-url=...
spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}
<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>
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
spring.datasource.tomcat.max-active=5
对我来说已经足够了,谢谢! - L.Butzaccording:
spring.datasource.max-active=100 # Advanced configuration...
spring.datasource.max-idle=8
spring.datasource.min-idle=8
-Dspring.datasource.tomcat.initial-size=10
(默认值为10):这是一个Spring Boot应用程序中的配置参数,用于设置Tomcat连接池中初始化的连接数。默认值为10。 - Christophe Roussy