Micronaut中使用R2DBC连接PostgreSQL时持续出现连接关闭错误
Micronaut + R2DBC PostgreSQL 请求正常但反复抛出Connection Closed错误
问题描述
在Micronaut应用中使用R2DBC连接PostgreSQL,所有数据库请求都能正常完成,但每次请求都会输出以下错误日志:
[reactor-tcp-epoll-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped io.r2dbc.postgresql.client.ReactorNettyClient$PostgresConnectionClosedException: Connection closed
相关依赖:
implementation("io.micronaut.data:micronaut-data-r2dbc") implementation("io.micronaut.r2dbc:micronaut-r2dbc-core") runtimeOnly("org.postgresql:r2dbc-postgresql")
数据库配置(application.yml):
r2dbc: datasources: default: url: r2dbc:postgresql://localhost:5432/backend username: xxx password: xxx
可能的解决方案
启用并配置连接池
默认情况下R2DBC可能未启用连接池或配置不合理,导致连接被提前关闭。在application.yml中添加连接池配置:r2dbc: datasources: default: url: r2dbc:postgresql://localhost:5432/backend username: xxx password: xxx pool: enabled: true initial-size: 5 max-size: 10 max-idle-time: 30m调整
initial-size、max-size和max-idle-time参数适配你的业务流量,避免连接被过早回收。检查事务上下文处理
确认数据访问方法的事务注解@Transactional是否正确作用于返回Mono/Flux的反应式方法上,确保事务上下文在整个流处理过程中保持有效,避免连接被提前释放。验证驱动版本兼容性
检查r2dbc-postgresql驱动版本是否与Micronaut Data、Micronaut R2DBC Core版本兼容。可以参考Micronaut官方文档的版本矩阵,升级或降级驱动至匹配版本。调整日志级别消除误报
若确认业务不受影响,该错误可能是连接池正常回收连接时的日志误报。可以降低相关日志级别减少干扰:logging: level: reactor.core.publisher.Operators: WARN
内容的提问来源于stack exchange,提问作者Pueblo2708
相关产品推荐
相关产品推荐

