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

新手上路,请多包涵

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

Spring-Boot 支持 tomcat-jdbcHikariCPCommons DBCP 它们的配置方式相同吗?

原文由 JBCP 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

要为 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),您应该能够以相同的方式设置属性,但您需要查看项目文档以了解可用的内容。

原文由 JBCP 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

 spring.datasource.tomcat.max-wait=10000

你可以在 这里 找到解释

spring.datasource.max-wait=10000

这已经没有效果了。

原文由 Daniel Nuss 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题