Spring Boot 2.6.6升级2.7.1后r2dbc-mysql驱动报错问题咨询
问题根因
报错核心是运行时类路径下没有适配Spring Boot 2.7.x版本的MySQL R2DBC驱动实现,R2DBC SPI加载时找不到对应mysql驱动的ConnectionFactory,只能识别到连接池组件pool,所以抛出异常。
Spring Boot 2.6.x及更早版本默认依赖管理中绑定的是社区维护的dev.miku:r2dbc-mysql,该版本后续已经停止维护。从Spring Boot 2.7.0开始,官方将内置管理的R2DBC MySQL驱动切换为持续迭代维护的官方分支io.asyncer:r2dbc-mysql。旧的dev.miku版本和2.7.x内置的r2dbc-spi 0.9.x存在API不兼容问题,保留旧依赖会触发编译错误,直接注释掉依赖又会导致驱动缺失,就会出现你看到的报错。
解决步骤
- 完全移除build.gradle中原有
dev.miku:r2dbc-mysql的依赖配置,不要保留注释或者残留引用 - 替换为Spring Boot 2.7.x官方管理的兼容版R2DBC MySQL驱动,不需要手动指定版本,直接引入即可:
runtimeOnly 'io.asyncer:r2dbc-mysql'
- 原有
spring.r2dbc配置下的数据库地址、端口、用户名、密码、库名等连接参数不需要修改,如果之前加过和旧驱动强绑定的自定义驱动类配置,直接删除即可 - 重新同步Gradle依赖,清理之前的构建缓存后重启项目,驱动就能正常加载。
排错提示
如果替换依赖后仍存在驱动加载异常,可以执行gradle dependencies查看依赖树,排查是否有其他第三方依赖传递引入了旧版dev.miku:r2dbc-mysql,如果存在的话将旧依赖排除,避免两个不同实现的R2DBC MySQL包同时存在引发SPI加载冲突。
内容的提问来源于stack exchange,提问作者user1578872
相关产品推荐
相关产品推荐

