我从4.x升级到5.x升级出了一些问题

方便更快捷的说明问题,可以按需填写(可删除)

使用环境:spring boot项目 之前是4.x 今天升级到了5.x升级后发现问题。我只使用用到了sharing-jdbc的功能。自己集成接口实现了两个分库分表算法。接口为RangeShardingAlgorithm、PreciseShardingAlgorithm。

场景、问题:升级到5.x项目编译报错找不到

RangeShardingAlgorithm、PreciseShardingAlgorithm 请问下如何解决?

已进行操作:我在github仓库中sharding-example中未找到相关代码

现状:项目编译报错。

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这个类来做参考.

1 个赞

是自定义算法吗?==》是自定义算法
需要 SPI 来注入实现吧!==》什么意思? :rofl:

能否采用CLASS_BASE来实验呢?我在5.0.0-GA这边是正常执行自定义分片算法的init()函数,而且后继的分片也正常进入.

1 个赞

在5.0.0,依然像4.1.1那样允许开发者替换shardingsphere内置的默认实现类,就是通过SPI.

1 个赞


嗯嗯,好的,了解了。4.0 刚用几天,还不熟,然后就又上5.0了。我有点蒙圈。

嗯嗯,看到了。感谢。
我在4.0自己实现的类中,其实很简单,就做了两件事。
1、精确查找
2、范围查找

是不是我用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分支.

1 个赞

好的,我已经找到了这个属性,我试试。

我先把基础的功能先搞定,在考虑定制化的情况。谢谢你,解决了很多问题。

可以参考下您4.0 RangeShardingAlgorithm、PreciseShardingAlgorithm 实现类的方法吗,我目前用的是4.0.0 RC-1 版本 一直报错 Cannot find range sharding strategy in sharding rule.

京ICP备2021015875号