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

使用postgres r2dbc-pool的连接池大小

单修德
2023-03-14

我无法使用spring webflux和r2dbc(使用r2dbc池驱动程序)打开超过10个连接。我的配置如下所示:

@Configuration
public class PostgresConfig extends AbstractR2dbcConfiguration {

  @Override
  @Bean
  public ConnectionFactory connectionFactory() {
    ConnectionFactory connectionFactory = ConnectionFactories.get(ConnectionFactoryOptions.builder()
        .option(DRIVER, "pool")
        .option(PROTOCOL, "postgresql")
        .option(HOST, host)
        .option(USER, user)
        .option(PASSWORD, password)
        .option(DATABASE, database)
        .build());
    ConnectionPoolConfiguration configuration = ConnectionPoolConfiguration.builder(connectionFactory)
        .maxIdleTime(Duration.ofMinutes(30))
        .initialSize(initialSize)
        .maxSize(maxSize)
        .maxCreateConnectionTime(Duration.ofSeconds(1))
        .build();
    return new ConnectionPool(configuration);
  }
}

当我指定10个以上的连接时,会出现如下错误:

org.springframework.dao.DataAccessResourceFailureException: 
Failed to obtain R2DBC Connection; nested exception is 
java.util.concurrent.TimeoutException: 
Did not observe any item or terminal signal within 1000ms in 'lift' 
(and no fallback has been configured)
    at org.springframework.data.r2dbc.connectionfactory.ConnectionFactoryUtils
    .lambda$getConnection$0(ConnectionFactoryUtils.java:71)

此外,连接的数量保持与初始大小相同。未创建新连接。

共有3个答案

乐华晖
2023-03-14

请注意,您可以使用版本0.8.4。发布(最新版本)https://mvnrepository.com/artifact/io.r2dbc/r2dbc-postgresql/0.8.4.RELEASE它不需要您实例化ConnectionFactory

姜煌
2023-03-14

好的,还应为ConnectionFactoryOptions指定最大\u大小。否则,连接池大小仍然保持为10。

import static io.r2dbc.pool.PoolingConnectionFactoryProvider.MAX_SIZE;

    ConnectionFactory connectionFactory = ConnectionFactories.get(ConnectionFactoryOptions.builder()
        .option(DRIVER, "pool")
        .option(PROTOCOL, "postgresql")
        .option(HOST, host)
        .option(USER, user)
        .option(PASSWORD, password)
        .option(DATABASE, database)
        .option(MAX_SIZE, maxSize)
        .build());
饶志
2023-03-14

Spring boot(至少2.3.4)在由属性/yaml设置池大小时,有一个棘手的“问题”。如果在数据库url中包含“pool”,则大小集(初始大小或最大大小)不会有任何影响,将使用r2dbc池的默认值10和10。

这是由于ConnectionFactoryC中的PooledConnectionFactoryCon条件onfigurations.java在spring.r2dbc.pool.enabled=true时失败,如果r2dbc-pool依赖项位于类路径上,并且“pool”是spring.r2dbc.url属性的一部分。

来自池化连接工厂条件文档:

检查是否请求了ConnectionPool的条件。如果池化是通过配置选择加入的,并且r2dbc url不包含与池化相关的选项,则该条件匹配。

这反过来会导致未创建ConnectionPool bean。

跳过r2dbc url属性中的“pool”关键字,并具有r2dbc池依赖项,那么您将获得一个正确配置的池。

 类似资料:
  • 如果要从单个进程连接到数据库,则应仅创建一个 Sequelize 实例. Sequelize 将在初始化时建立连接池. 可以通过构造函数的 options 参数(使用 options.pool)来配置此连接池,如以下示例所示: const sequelize = new Sequelize(/* ... */, { // ... pool: { max: 5, min: 0

  • 嘿,我正在使用Glassfish开源v4,我遇到了一个奇怪的问题。 我在管理控制台中定义了到Oracle 11g的JDBC连接池,并设置了: 初始和最小池大小:500 最大游泳池大小:1000 池大小调整数量::750 我已经为这个连接池创建了一个特定的用户。然而,有时当我检查数据库中打开的连接时,我发现有1000多个连接(我看到的最大连接数是1440个) 当发生这种情况时,任何查询尝试都会失败,

  • 我正在用vaadin和spring开发一个Web应用程序java,比如容器和eclipse链接,比如持久化框架。现在我想在我的应用程序中使用一个连接池。我在谷歌上读了一些我还没读到的东西。这是我的应用程序配置: 我的春日文脉 我的persistence.xml 但我得到以下异常:

  • 我正在使用Node js和Postgresql,并试图在连接实现中达到最高效率。< br >我看到pg-promise构建在node-postgres之上,node-postgres使用pg-pool来管理池。< br >我还读到“一次超过100个客户端是一件非常糟糕的事情”(node-postgres)。 我正在使用pg-promise,想知道: 对于非常大的数据负载,推荐的poolSize是什

  • 问题内容: 如何使用HttpClient创建连接池? 我必须经常连接同一台服务器。值得建立这样一个游泳池吗? 是否可以保持实时连接并将其用于各种请求,如果可以,我该如何做? 我正在使用Apache HTTP Client在Java中进行开发。 问题答案: [假设Java和Apache的HttpClient] 使用ThreadSafeClientConnManager。将单个全局实例传递给每个Htt

  • 问题内容: 为什么在hibernate配置文件中为连接池设置10?size = 1是内置的size。为什么需要增加大小? 问题答案: 来自Hibernate API 文档。 但是,Hibernate自己的连接池算法非常初级。它旨在帮助您入门,不适合在生产系统中使用,甚至不用于性能测试。您应该使用第三方池来获得最佳性能和稳定性。只需将hibernate.connection.pool_size属性替