java - postgres r2dbc-pool 的连接池大小

标签 java spring-webflux r2dbc

我无法使用 spring-webflux 和 r2dbc(使用 r2dbc-pool 驱动程序 0.8.0.M8)打开 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)


此外,连接数保持与初始大小相同。不会创建新连接。

最佳答案

Spring Boot(至少 2.3.4)在由 properties/yaml 设置时有一个关于池大小的棘手“问题”。如果您在数据库 url 中包含“pool”,则大小集(初始大小或最大大小)将没有任何影响,将使用 r2dbc 池的默认值 10 和 10。
这是由于 ConnectionFactoryConfigurations.java 中的 PooledConnectionFactoryCondition两者都失败时 spring.r2dbc.pool.enabled=true ,如果 r2dbc-pool 依赖项在类路径上,则是这样, “池”是 spring.r2dbc.url 的一部分属性(property)。
来自 PooledConnectionFactoryCondition 文档:

Condition that checks that a ConnectionPool is requested. The condition matches if pooling was opt-in via configuration and the r2dbc url does not contain pooling-related options.


这反过来会导致不创建 ConnectionPool bean。
跳过 r2dbc url 属性中的“pool”关键字并具有 r2dbc-pool 依赖项,然后您将获得正确配置的池。

关于java - postgres r2dbc-pool 的连接池大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57971278/

相关文章:

java - Log4j2 - 如何配置 JDBC Appender?

java - Spring安全检查用户是否可以访问提到的url

spring - 如何启用 Spring Reactive Web MVC 来处理多部分文件?

spring-boot - 如果 Mono 为空,则创建一个未找到的 ServerResponse

spring-boot - 在 Spring Data R2DBC 中设计一对一和一对多关系

oracle - 错误的 SQL 语法 - Spring data R2DBC 与 Oracle

java - 线程 "main"java.lang.NoClassDefFoundError : Hello 中出现异常

java - 贝尔曼·福特随机产生错误结果

spring - 在这种情况下,异常神秘地逃离 try-catch block 的最可能原因是什么?

java - Spring +R2DBC : How to close DatabaseClient and TransactionalOperator?