本文主要是介绍shardingsphere从4.1.1升级到5.2.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作为工程师都希望自己的产品能够大卖,而项目开发中使用的技术不可能所有都是自己写的,使用到的开源组件例如shardingsphere这样好的组件,也会随着用户量的增加而需要升级,没必要非得像hutool那样非得自己写一边,当然hutool很优秀。
原先产品中使用的是4.1.1版本,这是2020年的版本,今年是2024年,已经过去了4年,可以升级了。升级之前先看了,shardingsphere升级至5.1.2配置遇坑
1 Consider defining a bean named ‘shardingDataSource’ in your configuration.
Parameter 0 of method sqlSessionFactory in com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration required a bean named 'shardingDataSource' that could not be found.The injection point has the following annotations:- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:Consider defining a bean named 'shardingDataSource' in your configuration.
下图进去了,好像也不会影响,因为4.1.1版本也是为空,但执行这一步后会从nacos中获取sharding的配置,但升级后却没有加载,这是为什么呢?
查看mybatis-plus的配置,这里是加载了nacos
的配置
但我的分表配置是按照下方模式加载进来的,那么sharding-sphere.yaml
是如何被sharding识别的呢?
ShardingSphere5.x.x(最新版)配置MySQL读写分离,我使用的spring版本是2.7.9
,因此使用5.2.1
就可以,不需要再往上升级,这个也是使用jdk1.8
的需要.问题应该是出在程序没有加载到nacos
中的配置,但这是为什么呢?这个问题还真不知道从哪里下牙。当我看到5.2.1的文档时,
将type
变更为data-source-class-name
结果出现了下面的异常,那是不是说配置读取到了
Caused by: java.lang.NullPointerException: nullat org.apache.shardingsphere.spring.boot.datasource.DataSourceMapSetter.getDataSource(DataSourceMapSetter.java:90)at org.apache.shardingsphere.spring.boot.datasource.DataSourceMapSetter.getDataSourceMap(DataSourceMapSetter.java:65)at org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration.setEnvironment(ShardingSphereAutoConfiguration.java:120)
调试看,果然配置读取到了。
改回type
后,可以看到配置,那么到底是什么导致mybatplus报错呢?
主库和影子库都可以读取到对应的配置
但是动态数据源却找不到shardingDataSource
,那么这个shardingDataSource
是从哪里配置的呢?没有地方给他初始化,直接使用肯定会报错,但为什么4.1.1
没有这个问题呢?
下载4.1.1
和5.2.1
的源码可以看到差异
SHARDING_PREFIX
调整为从spring.shardingsphere.sharding
调整为spring.shardingsphere.rules.sharding
那么是否改配置就可以了呢?事实上还是没有解决问题,还需继续跟踪,4.1.1
存在default-data-source-name
,但是在5.2.1
中,这个配置没有了
所以在4.1.1
的环境中,才可以找到默认的数据配置,看来最终的问题转换为默认数据源了
接着查看ShardingSphere5.x分库分表使用,他采用的是5.1.1,但是下图5.2.1
位置应该是获取不到dataSource.getContextManager()
从git上下载源码,查看得到5.1.0
但是到了5.2.1
,@Getter
没有了
这篇关于shardingsphere从4.1.1升级到5.2.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!