从小我就黑 2024-04-26 18:31 采纳率: 71.4%
浏览 22
已结题

sirngboot+shardingsphere+mybatis-plus自定义分表规则查询失败

img

img

明明设置个自定义算法 除了分表的其他表查询都没有问题 只有多表来查询的时候有问题,根本不走自定义算法片 麻烦各位看一下什么原因

执行其他单表没有问题 多表不行 完全不走图2算法

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-04-26 18:31
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    图片内容

    第一张图片(1a1fb088-87c6-471f-aab8-408309421a76_f57272718ce645d2a63be8363ebe3994.jpeg)展示了一个自定义的分表算法类 OrderIdShardingAlgorithm,它实现了 PreciseShardingAlgorithm<String> 接口。该类中有一个 doSharding 方法,用于根据订单ID的后缀来决定分表的逻辑。

    第二张图片(e706caa4-d119-4428-9a0e-b0f91c08eee2_21680856ea434af7a011f72297301b2d.jpeg)展示了一个配置文件,其中包含了数据源的配置和分片策略的配置。配置文件中定义了两个数据源,并且为 ct_order_by_stages 表指定了实际的分片节点和分片策略,使用了 OrderIdShardingAlgorithm 作为精确分片算法。

    问题概括

    问题是在使用Spring Boot、ShardingSphere和MyBatis-Plus时,自定义的分表规则在多表查询时没有按预期工作,导致查询失败。

    问题出现原因

    1. 配置错误:可能是在配置文件中的某些参数配置有误,如驱动类名、URL、用户名或密码等。
    2. 分片策略未正确应用:在多表查询时,可能没有正确地应用分片策略,导致查询没有按照自定义算法进行分片。
    3. 算法实现问题OrderIdShardingAlgorithm 类的实现可能存在逻辑错误,导致在多表查询时无法正确返回分片键。

    问题解决方案

    1. 检查配置文件:确保所有的数据源配置都是正确的,包括驱动类名、数据库URL、用户名和密码。
    2. 验证分片策略:确保分片策略在多表查询时能够正确应用。可以通过日志输出来检查分片键是否正确生成。
    3. 调试算法类:在 OrderIdShardingAlgorithm 类的 doSharding 方法中添加日志输出,以确保在多表查询时该方法被调用,并且分片逻辑是正确的。

    提供代码

    以下是对 OrderIdShardingAlgorithm 类的一些建议修改,以及如何运行和预期的结果:

    修改后的OrderIdShardingAlgorithm类

    @Component
    public class OrderIdShardingAlgorithm implements PreciseShardingAlgorithm<String> {
        
        @Override
        public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
            String orderId = shardingValue.getValue();
            String suffix = orderId.substring(orderId.length() - 1);
            String logicTableName = shardingValue.getLogicTableName();
            return logicTableName + "_" + suffix;
        }
    }
    

    运行方式

    1. 将修改后的代码替换到Spring Boot项目中相应的位置。
    2. 重新启动Spring Boot应用。
    3. 执行相关的多表查询操作。

    预期运行结果

    • 应用将使用修改后的 OrderIdShardingAlgorithm 进行分片。
    • 日志中将显示分片算法的调用和分片键的生成过程。
    • 多表查询将根据订单ID的后缀正确地路由到相应的分表。

    推荐相关链接

    1. ShardingSphere官方文档
    2. MyBatis-Plus官方文档
    3. Spring Boot官方文档

    这些链接提供了关于ShardingSphere、MyBatis-Plus和Spring Boot的详细信息,可以帮助你更好地理解和配置这些技术。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月6日
  • 已采纳回答 4月28日
  • 修改了问题 4月28日
  • 修改了问题 4月26日
  • 展开全部

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆