Spring-Boot是一个非常棒的工具,但是当涉及更高级的配置时,文档有点稀疏。如何设置数据库连接池的最大大小等属性?
Spring-Boot支持tomcat-jdbc
,HikariCP
和Commons DBCP
本机是否都以相同的方式配置?
答案 0 :(得分:109)
事实证明,设置这些配置属性非常简单,但the official documentation更通用,因此在专门搜索连接池配置信息时可能很难找到。
要设置tomcat-jdbc的最大池大小,请在.properties或.yml文件中设置此属性:
spring.datasource.maxActive=5
如果您愿意,也可以使用以下内容:
spring.datasource.max-active=5
您可以通过这种方式设置任何连接池属性。 Here is a complete list of properties supported by tomcat-jdbc
要了解其工作原理,您需要深入了解一下Spring-Boot代码。
Spring-Boot像这样构建DataSource(see here,第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),你应该能够以相同的方式设置属性,但是你可以我需要查看项目文档以了解可用的内容。
答案 1 :(得分:30)
在当前版本的Spring-Boot(1.4.1.RELEASE)中,每个池化数据源实现都有自己的属性前缀。
例如,如果您使用的是tomcat-jdbc:
spring.datasource.tomcat.max-wait=10000
您可以在here
中找到解释spring.datasource.max-wait=10000
这已不再有效了。
答案 2 :(得分:5)
例如Tomcat(默认)需要:
spring.datasource.ourdb.url=...
和HikariCP将很满意:
spring.datasource.ourdb.jdbc-url=...
我们可以在没有样板配置的情况下满足两者:
spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}
如果Tomcat,HikariCP或Commons DBCP在类路径上,将选择其中一个(首先是Tomcat的顺序)。
...所以,我们可以使用这个maven配置(pom.xml)轻松替换连接池提供程序:
<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>
答案 3 :(得分:4)
在Spring Boot 2.x中,您需要引用提供程序的特定属性。
默认的hikari可以用spring.datasource.hikari.maximum-pool-size
设置。
答案 4 :(得分:0)
根据您的应用程序类型/大小/加载/否。用户..etc-您可以继续关注您的生产属性
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