使用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:compileio.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
相关产品推荐
相关产品推荐

