Spring R2DBC多主机故障转移支持问题与版本兼容报错咨询
解决方案:Spring R2DBC PostgreSQL故障转移兼容版本与类型转换问题处理
问题核心
- Spring Boot 2.7.5自带的
r2dbc-postgresql-0.9.2.RELEASE不支持r2dbc:postgresql:failover://格式的多主机故障转移URL - 单独升级
r2dbc-postgresql到1.0.0.RC1后,出现Long转Integer的类型转换异常,根源是版本不匹配:Spring Boot 2.7.5自带r2dbc-spi-0.9.1.RELEASE,而r2dbc-postgresql-1.0.x依赖的是r2dbc-spi-1.0.x,两者类型映射逻辑存在冲突
兼容版本组合方案
方案1:使用0.9.x分支的故障转移兼容版本
无需升级SPI,直接选用支持故障转移的0.9.x新版本,与Spring Boot 2.7.5自带依赖完全兼容:
- 将
r2dbc-postgresql升级到0.9.10.RELEASE(该版本已实现failover://URL解析,且适配r2dbc-spi-0.9.1.RELEASE和r2dbc-pool-0.9.2.RELEASE) - Maven依赖配置示例:
<dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-postgresql</artifactId> <version>0.9.10.RELEASE</version> </dependency>
方案2:统一升级R2DBC生态至1.0.x
若需使用r2dbc-postgresql-1.0.x,必须同步升级所有R2DBC相关依赖,保证版本对齐:
- 升级
r2dbc-spi到1.0.0.RELEASE - 升级
r2dbc-pool到1.0.0.RELEASE - Maven依赖配置示例:
<dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-postgresql</artifactId> <version>1.0.0.RELEASE</version> </dependency> <dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-spi</artifactId> <version>1.0.0.RELEASE</version> </dependency> <dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-pool</artifactId> <version>1.0.0.RELEASE</version> </dependency>
说明:Spring Boot 2.7.x对应的Spring Data R2DBC版本为3.0.x,已兼容R2DBC SPI 1.0.x,无需额外调整Spring Data依赖
临时规避类型转换异常
若暂时无法升级依赖,可通过显式控制参数类型避免转换错误:
- 在代码中确保查询参数类型与数据库字段类型严格匹配,例如布尔参数直接传入
Boolean类型:
databaseClient.delete() .from("my_table") .where("boolean_flag = $1", Boolean.TRUE) .fetch() .rowsUpdated() .block();
内容的提问来源于stack exchange,提问作者mr.nothing
相关产品推荐
相关产品推荐

