| |
|
开发:
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} 原因见官网: 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/> 标签的 '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),所以肯定是由默认的执行策略的) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 17:41:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |