IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> sharding-jdbc 与 springmvc整合随笔 -> 正文阅读

[开发测试]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.

原因:

????????我的情况是,我在配置

<sharding:sharding-algorithm id="算法名称_1"/>

???的时候,id的值填写错了,写成了“算法名称_1”。而本来想要引用它的标签
<sharding:standard-strategy algorithm-ref="算法名称_2"/>中的id写的是“算法名称_2”。
  

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

 

详情比如:

    <sharding:standard-strategy id="orderTableStrategy" sharding-column="order_str_id"
                                algorithm-ref="inlineOrderTableStrategyAlgorithm"/>


    <!--CLASS_BASED方式-->
    <sharding:sharding-algorithm id="inlineOrderItemTableStrategyAlgorithm" type="CLASS_BASED">
        <props>
            <prop key="strategy">standard</prop>
            <prop key="algorithmClassName">
                com.jfqqqq.test.persist.ClassBasedOrderStandardShardingAlgorithmFixture
            </prop>
        </props>
    </sharding:sharding-algorithm>

? ? ? ? <sharding:standard-strategy/> 标签的 'algorithm-ref' 属性标明引用的是"inlineOrderTableStrategyAlgorithm"算法,但是我在<sharding:sharding-algorithm/>中的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),所以肯定是由默认的执行策略的)

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:30:22  更:2022-03-17 22:30:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:18:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码