You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用io.r2dbc.pool创建连接池后R2DBC验证查询长期Idle问题

Spring WebFlux + R2DBC连接池Idle连接(SELECT 1)长期未释放问题

环境信息

  • Spring Boot版本:2.6.6(集成spring-boot-starter-webflux与spring-boot-starter-data-r2dbc)
  • 核心R2DBC依赖:
    • io.r2dbc:r2dbc-spi:jar:0.8.6.RELEASE:compile
    • io.r2dbc:r2dbc-pool:jar:0.8.8.RELEASE:compile
  • 数据库:AWS Aurora Postgres

自定义连接池配置

@Bean
@Qualifier("customConnectionFactory")
public ConnectionFactory connectionFactory() {
  ConnectionFactory connectionFactory =
      new PostgresqlConnectionFactory(
          PostgresqlConnectionConfiguration.builder()
              .host(hostName)
              .port(5432)
              .database(databaseName)
              .username(userName)
              .password(password)
              .connectTimeout(Duration.ofMinutes(120))
              .build());

  ConnectionPoolConfiguration configuration =
      ConnectionPoolConfiguration.builder(connectionFactory)
          .maxIdleTime(Duration.ofMinutes(30))
          .initialSize(200)
          .maxSize(300)
          .maxLifeTime(Duration.ofMillis(Long.MAX_VALUE))
          .build();
  return new ConnectionPool(configuration);
}

@Bean
@Qualifier("customPostgresClient")
public DatabaseClient databasePostgresClient(
    @Qualifier("customConnectionFactory") ConnectionFactory connectionFactory) {
  return DatabaseClient.create(connectionFactory);
}

问题现象

应用启动后,R2DBC连接池定期触发连接验证查询SELECT 1,但执行该查询的连接长期处于Idle状态;业务查询使用的连接无此异常。即使将连接池配置中的maxLifeTime修改为2小时,到期后这些Idle连接仍未被回收。

连接状态检查SQL

select
  pid,
  now() - pg_stat_activity.query_start AS duration,
  query,
  state,
  pg_stat_activity.query_start
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes' and query='SELECT 1' order by pg_stat_activity.query_start desc;

连接状态查询结果

连接状态查询结果

内容的提问来源于stack exchange,提问作者Amol Kshirsagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:38