方便更快捷的说明问题,可以按需填写(可删除)
使用环境:spring boot项目 之前是4.x 今天升级到了5.x升级后发现问题。我只使用用到了sharing-jdbc的功能。自己集成接口实现了两个分库分表算法。接口为RangeShardingAlgorithm、PreciseShardingAlgorithm。
场景、问题:升级到5.x项目编译报错找不到
RangeShardingAlgorithm、PreciseShardingAlgorithm 请问下如何解决?
方便更快捷的说明问题,可以按需填写(可删除)
RangeShardingAlgorithm、PreciseShardingAlgorithm 请问下如何解决?
5.x没有这两个接口了,以合并为StandardShardingAlgorithm,此接口的两个方法就是来自4.x的这两个接口,可以结合源码看下,有不少框架默认的实现类
好的,我先看看源码,谢谢了。
我看了源码,也实现了StandardShardingAlgorithm类,我又有新问题了。
我在application中配置的属性指向了我实现的类,我run起来之后断点没有进来。另外删除这一行注释,代码依然运行成功。我很困惑。spring.shardingsphere.rules.sharding.tables.report_site_day.database-strategy.standard.sharding-algorithm-name=com.test.MyDBRangeShardingAlgorithm
是自定义算法吗? 需要 SPI 来注入实现吧!
嗨,显然,5.x没有这两个接口.
你可以参考master分支下的example来改写,自定义java类对应的是CLASS_BASE分片算法.
在master分支下,可以全局搜索org.apache.shardingsphere.example.extension.sharding.algortihm.classbased.fixture.ClassBasedStandardShardingAlgorithmFixture这个类来做参考.
是自定义算法吗?==》是自定义算法
需要 SPI 来注入实现吧!==》什么意思?
能否采用CLASS_BASE来实验呢?我在5.0.0-GA这边是正常执行自定义分片算法的init()函数,而且后继的分片也正常进入.
在5.0.0,依然像4.1.1那样允许开发者替换shardingsphere内置的默认实现类,就是通过SPI.
嗯嗯,好的,了解了。4.0 刚用几天,还不熟,然后就又上5.0了。我有点蒙圈。
还想请教你一个问题,5.0 不是都已经支持跨库查询了。然后我遇到一个这样的问题java.lang.IllegalStateException: All tables must be in the same datasource.
(我执行的是跨库查询的sql)
跨库查询用的是federation执行引擎,我记得是默认关闭的.有个属性sql-federation-enabled
,你可以找一下. 属性配置 :: ShardingSphere (apache.org)
常用情景是覆盖的差不多了,不过大多数情况下总需要定制化,CLASS_BASE同样不可或缺.欢迎你提交新的分片方案到master分支.
好的,我已经找到了这个属性,我试试。
我先把基础的功能先搞定,在考虑定制化的情况。谢谢你,解决了很多问题。
可以参考下您4.0 RangeShardingAlgorithm、PreciseShardingAlgorithm 实现类的方法吗,我目前用的是4.0.0 RC-1 版本 一直报错 Cannot find range sharding strategy in sharding rule.
不知道你是否解决此问题呢 ?怎么解决的