在 R2DBC mysql 模型类中,java.lang.Integer 无法转换为类 java.lang.Long
我在弹簧WebFlux反应性网络中使用R2DBC MySQL驱动程序。我尝试执行表格架SQL脚本。但是脚本连续导致错误。
首先,我进行了3个模型类。
user.java
497735174
post.java
650496422
tag.java
929018272
schema.sql
881881925
配置方法执行schema.sql。方法
460454988
但是,最初执行的架构.sql抛出错误,
377263514
我认为我的反应性R2DBC模型类包含一些错误。 ClassCastException。但是我不知道什么元素有错误的类型。打印错误消息显示没有代码行号。我将模型类的ID类型(用户,帖子,标签)更改为整数类型,但是抛出了相同的错误。
如果您正在使用 https://github.com/mirromutth/r2dbc-mysql 0.8.x RELEASE 和最新的 Spring Boot 2.7 或 Spring Boot 3.0.x,我认为您使用的 R2dbc MySQL 驱动与 Spring Boot 管理的 R2dbc SPI 存在兼容性问题。
在最新的 Spring Boot 3.0 中,R2dbc SPI 更新到 1.0,自 0.8 以来引入了几个不兼容的 API(r2dbc-mysql 0.8.x RELEASE 与 R2dbc SPI 0.8 对齐)。 我在升级到 R2dbc 0.9 和 1.0 但使用的驱动程序版本不兼容时遇到了类似的异常 。
- 尝试使用最新的 MariaDB R2dbc 驱动程序 连接您的 MySQL
- 考虑其他数据库,例如PostgreSQL 或直接切换到 MariaDB。
更新(2023-5-23) :在最新的 Spring Boot 3.x 中,它包含 jasycn r2dbc mysql ,而不是原始的 r2dbc mysql 驱动程序 ,该驱动程序未激活并坚持使用旧的 R2dbc SPI 0.8。
我假设您正在使用最新版本的 Spring Boot 和 Spring Framework。
该问题的根本原因是使用 r2dbc-spi:1.0.0,它需要
getRowsUpdated()
返回 Long,但您使用的是 dev.miku:r2dbc-mysql:0.8.2,它返回 Integer。
我建议切换到
io.asyncer:r2dbc-mysql:1.0.0
,它是
dev.miku:r2dbc-mysql
的官方后继者。有关详细信息,请参阅
弃用新闻
帮助我将依赖项从
implementation("org.postgresql:r2dbc-postgresql:1.0.0.RELEASE")
更改为
implementation("io.r2dbc:r2dbc-postgresql:0.8.13.RELEASE")
适用于 springboot 2.7.6
感谢 Hantsy。