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

2022-08-31 10:55:11

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

Spring-Boot支持,并且它们本身是否都以相同的方式配置?tomcat-jdbcHikariCPCommons DBCP


答案 1

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

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

spring.datasource.maxActive=5

如果您愿意,也可以使用以下命令:

spring.datasource.max-active=5

可以通过这种方式设置所需的任何连接池属性。以下是 tomcat-jdbc 支持的属性的完整列表

要更广泛地理解它是如何工作的,你需要深入研究Spring-Boot代码。

Spring-Boot 像这样构造数据源(请参阅此处,第 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()

此时,魔法开始使用 。此注释告诉 Spring 查找带有前缀的属性(即 )。对于以该前缀开头的每个属性,Spring 将尝试使用该属性调用 DataSource 上的 setter。@ConfigurationPropertiesCONFIGURATION_PREFIXspring.datasource

Tomcat DataSource是DataSourceProxy的扩展,它具有.setMaxActive()

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

其他连接池呢?

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


答案 2

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

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

spring.datasource.tomcat.max-wait=10000

您可以在此处找到解释

spring.datasource.max-wait=10000

这不再有效。


推荐