Spring Boot Reactive项目R2DBC-PostgreSQL间歇性连接超时排查
Spring Boot响应式架构偶发R2DBC数据库连接超时问题
基础技术栈与配置
- 核心框架:采用Spring Boot 2.3.1 响应式编程架构
- 数据库访问层:使用r2dbc-postgres 0.8.7版本
- 数据库连接配置:基于R2DBC连接池构建ConnectionFactory,设置最大连接数1000、初始连接数1,同时配置R2dbcTransactionManager作为响应式事务管理器
问题详情
目前暂未定位到响应式接口连接数据库后偶发无响应、最终触发连接超时的根因,问题呈现间歇性复现特征:重启Docker容器后接口可正常响应,但运行一段时间后会再次出现相同异常。
典型异常复现场景
以业务方法viewBySkuCodeAndCountryCode为案例:
- 该方法通过自动注入的
PlanPackageCurrencyPriceRepository调用findBySkuCodeAndCountryCode查询数据库 - 对数据库查询返回的Mono对象做映射处理:若查询到的
PlanPackageCurrencyPrice状态为ACTIVE,会调用redisTemplate写入缓存,并对Redis操作返回的Mono对象执行subscribe;若状态非ACTIVE则抛出自定义业务异常 - 异常触发时的日志特征:触发数据库查询时,日志会输出获取R2DBC事务连接、将连接切换为手动提交模式的DEBUG信息,之后日志停止输出,等待固定时长后接口直接抛出连接超时错误
- 数据库侧关联现象:PostgreSQL侧日志记录有
could not receive data from client: Connection timed out的客户端连接超时提示;因部署应用的VM时区为GMT、PostgreSQL服务器时区为IST,两端日志时间戳无法直接对齐匹配
核心排查诉求
请协助判断该问题是响应式代码编写逻辑不当导致,还是数据库连接配置不合理引发。
内容的提问来源于stack exchange,提问作者ramyashree
相关产品推荐
相关产品推荐

