栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

sharding-jdbc 与 springmvc整合随笔

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sharding-jdbc 与 springmvc整合随笔

版本:5.1.0

注意点 及 易犯错误: 1. inline表达式

不能这样写:

t_order_${2..7}

要这样写:

 t_order_$->{2..7}

原因见官网:

数据分片 :: ShardingSpherehttps://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/spring-namespace/rules/sharding/

2. 自定义分片算法不起作用?

        自定义分片算法后,执行的时候没有执行我的分片算法的doSharding方法?但是启动时执行了init()方法?而且执行查询时没有执行doSharding方法却不报错,并且返回空数据,同时执行插入操作时还报错:

Insert statement does not support sharding table routing to multiple data nodes.

原因:

        我的情况是,我在配置



   的时候,id的值填写错了,写成了“算法名称_1”。而本来想要引用它的标签
中的id写的是“算法名称_2”。
  

        也就是想要引用算法的策略标签中写错了算法的id

 

详情比如:

    


    
    
        
            standard
            
                com.jfqqqq.test.persist.ClassbasedOrderStandardShardingAlgorithmFixture
            
        
    

        标签的 'algorithm-ref' 属性标明引用的是"inlineOrderTableStrategyAlgorithm"算法,但是我在中的id写错了,写成了“inlineOrderItemTableStrategyAlgorithm”。

所以:

        1. 不能调用doSharding方法是因为没绑定上这个策略;

        2. 而init函数会被执行是因为在标签里声明了这个策略,于是在初始化时就会被执行创建,只不过没有被使用罢了;

        3. 至于报的错误,显而易见,是因为我的数据库操作实体类没能绑定上策略,所以sharding-jdbc就执行了它内部的一个默认的策略,而内部策略不支持insert的分表,以及查询在效果上只默认查询第一个实际表,此时如果第一个实际表里没有命中数据,就会返回空数据了。(具体是的默认行为是什么还没有看源码呢,不过通过将逻辑数据表的第一个实际表删除(比如order_$->{0..3}的0删除),就可以发现报错找不到表(Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.order_0' doesn't exist),所以肯定是由默认的执行策略的)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769486.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号