Spring-Boot 是一个非常棒的工具,但是当涉及到更高级的配置时,文档有点稀疏。如何设置数据库连接池的最大大小等属性?
Spring-Boot 支持 tomcat-jdbc
, HikariCP
和 Commons DBCP
它们的配置方式相同吗?
原文由 JBCP 发布,翻译遵循 CC BY-SA 4.0 许可协议
Spring-Boot 是一个非常棒的工具,但是当涉及到更高级的配置时,文档有点稀疏。如何设置数据库连接池的最大大小等属性?
Spring-Boot 支持 tomcat-jdbc
, HikariCP
和 Commons DBCP
它们的配置方式相同吗?
原文由 JBCP 发布,翻译遵循 CC BY-SA 4.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 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
事实证明,设置这些配置属性非常简单,但 官方文档 更通用,因此在专门搜索连接池配置信息时可能很难找到。
要为 tomcat-jdbc 设置最大池大小,请在 .properties 或 .yml 文件中设置此属性:
如果您愿意,还可以使用以下内容:
您可以通过这种方式设置任何您想要的连接池属性。 这是
tomcat-jdbc
支持的属性的完整列表。要更普遍地理解这是如何工作的,您需要深入研究一下 Spring-Boot 代码。
Spring-Boot 像这样构造 DataSource( 参见此处,第 102 行):
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),您应该能够以相同的方式设置属性,但您需要查看项目文档以了解可用的内容。