【记】研究Sharding-JDBC遇到的一个异常(Caused by: io.shardingsphere.core.exception.ShardingException: Cannot get ...

本文详细解析了ShardingSphere中因表元数据不一致导致的ShardingException异常,并通过跟踪源码定位问题,最终确认为实际表结构与配置不符,提供了具体的解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、异常信息

Caused by: io.shardingsphere.core.exception.ShardingException: Cannot get uniformed table structure for `t`. The different meta data of actual tables are as follows

异常信息提示找不到表的元数据信息,也就是找不到表,但是数据表实际已经创建。

这个异常信息网上基本搜不到有效的信息和解决方案

 

二、排查过程

at io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader.checkUniformed(TableMetaDataLoader.java:136)
at io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader.load(TableMetaDataLoader.java:68)
at io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader.load(TableMetaDataLoader.java:63)

private TableMetaData load(final TableRule tableRule, final ShardingDataSourceNames shardingDataSourceNames) {
List<TableMetaData> actualTableMetaDataList = loadActualTableMetaDataList(tableRule.getActualDataNodes(), shardingDataSourceNames);
checkUniformed(tableRule.getLogicTable(), actualTableMetaDataList);
return actualTableMetaDataList.iterator().next();
}

上述为异常栈信息,通过跟踪源码的方式发现最下面load方法中的 tableRule.getActualDataNodes()返回的是t0、t1两个数据,分表的配置也是:actual-data-nodes=ds_0.t$->{0..1}

 

根据上述信息分析发现,配置的表是t0,t1,但是数据库实际只创建了t0表,所以抛出上述异常,再创建t1表即可解决问题

 

三、总结

   使用第三方库遇到问题网上又找不到有效的解决方案时,可尝试通过跟踪源码的方式找到问题原因 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值