【記】研究Sharding-JDBC遇到的一個異常(Caused by: io.shardingsphere.core.exception.ShardingException: Cannot get uniformed table structure for `t`. The different meta data of actual tables are as follows)


 

一、異常信息

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表即可解決問題

 

三、總結

   使用第三方庫遇到問題網上又找不到有效的解決方案時,可嘗試通過跟蹤源碼的方式找到問題原因 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM