遇到的问题
最近在使用
sharding-jdbc
进行分表拆分,配置了分表规则在yaml上,但是发现最终入库的时候路由规则并未生效,便开始寻找bug。
解决问题的思路
由于从来没有遇到类似的问题,且有之前成功路由其他表的规则。首先怀疑是框架本身问题,于是按照以下思路进行排查:
- 首先读shard-jdbc关于路由部分源码
- 查看其他表是否能正常路由
- 更换路由字段和规则,看能够生效。
以上问题在第三点时发现更换其他字段可以正常路由,于是再仔细读shard-jdbc源码并调试。
最终发现在yml
中配置的路由字段有问题,转义的时候破坏的字段的原有含义。原有配置如下:
xxx:
actualDataNodes: ds.xxx$->{0..1}
tableStrategy:
inline:
shardingColumn: no
algorithmExpression: xxx$->{no % 2}
通过debug发现它在yml
到java内存中时,将no映射为了false,故在shard-jdbc
中路由发生故障,导致无法路由。yaml bool的关键字定义
总结
yaml规范中定义了很多关键字,我们在使用过程中应当尽量避免和yaml关键字冲突,这样在yaml解析过程中才能达到我们想要的效果。