当前位置: 首页 > 知识库问答 >
问题:

spring-引导:我如何设置JDBC池属性,如最大连接数?

国兴文
2023-03-14

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

spring-boot支持tomcat-jdbchikaricpcommonsdbcp它们都是以相同的方式配置的吗?

共有2个答案

仲孙磊
2023-03-14

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

例如,如果您正在使用tomcat-jdbc:

spring.datasource.tomcat.max-wait=10000

你可以在这里找到解释

spring.datasource.max-wait=10000

这已经没有效果了。

司马飞鸿
2023-03-14

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

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

spring.datasource.maxActive=5

如果您愿意,还可以使用以下内容:

spring.datasource.max-active=5

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

为了更普遍地理解这是如何工作的,您需要稍微深入一下spring引导代码。

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负责通过检查类路径上的一系列已知类中的每一个来确定使用哪个池库。然后构造数据源并将其html" target="_blank">返回给DataSource()函数。

在这一点上,魔术开始使用@configurationproperties。这个注释告诉spring查找具有前缀configuration_prefix(即Spring.datasource)的属性。对于每个以该前缀开头的属性,spring将尝试用该属性调用DataSource上的setter。

Tomcat数据源是DataSourceProxy的扩展,它具有setMaxActive()方法。

这就是如何正确应用spring.datasource.maxactive=5

我没有尝试过,但是如果您使用的是其他支持spring引导的连接池(当前是HikariCP或Commons DBCP),您应该可以以相同的方式设置属性,但是您需要查看项目文档以了解哪些是可用的。

 类似资料:
  • 问题内容: Spring-Boot是一个非常出色的工具,但是涉及到更高级的配置时,文档很少。如何设置属性,例如数据库连接池的最大大小? Spring-Boot支持,并且它们本身是否都以相同的方式配置? 问题答案: 事实证明,设置这些配置属性非常简单,但是官方文档更为通用,因此在专门搜索连接池配置信息时可能很难找到。 要设置tomcat-jdbc的最大池大小,请在.properties或.yml文件

  • 我在Spring JDBC中使用Spring Boot 1.5.4。 使用Spring JDBC的Spring Boot微服务在尝试执行HTTP PUT时(在一群用户尝试执行HTTP PUT后)会出现以下问题,该问题会逐渐进入Spring JDBC调用: pom.xml: 我猜我需要设置一个JDBC连接池... 在我的application.properties设置中,(我有两个不同的数据库——一

  • 在OkHttp中,我找不到设置硬最大连接池大小的方法。从留档https://square.github.io/okhttp/3.x/okhttp/okhttp3/ConnectionPool.html很明显,您可以设置最大空闲连接,但不能设置整体最大值。这意味着在高负载下,它可以增长超过任何限制。 有没有办法最大化池?如果没有,为什么没有?

  • 我有一个问题,在通过tomcat web应用程序应用户请求重置MySQL数据库后,我会收到tomcat异常。到目前为止,我已尝试将其分解为设置、问题和我的分析,以帮助任何试图阅读本文的人。 重置基本上包括从java代码调用bash脚本以: 删除根mysql用户密码 加载数据库的旧版本 在上面运行一些脚本 恢复所有密码 这是一个用户启动的过程,通常将数据库恢复到以前的状态,但它也用于从另一个系统导入

  • 问题内容: 要指定SQLite连接属性,请使用org.sqlite.SQLiteConfig,它的内容如下: 使用c3p0创建连接池的过程如下: 问题:如何创建结合了两者的数据源,让我设置诸如连接池的最大池大小和sqlite的同步模式之类的东西? 问题答案: 尝试 现在,数据源将是c3p0 PooledDataSource,它包装了已根据需要配置的SQLite未池化数据源。 请参阅C3P0的文档,

  • 问题内容: 我有一个具有相当基本配置的基本Spring JDBC应用程序: 我想介绍一个连接池,在阅读了SO上的多个线程后,我对使用哪个池库感到有些困惑。 C3P0和DBCP似乎在SO方面具有更多的信誉。由于使用的是Oracle,因此我也可以使用驱动程序提供的池数据源。 我了解还有更多可用的库-例如新的Apache Tomcat 7池库。 我真的应该避免使用任何库吗? 我应该在给定的库中使用任何建