我是靠谱客的博主 落寞毛豆,最近开发中收集的这篇文章主要介绍sharding_hint获取所有表分布,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

sharding_hint

  • 获取所有表分布
    • hint的使用
      • 指定库表
      • 清理hint线程变量

获取所有表分布

TableRule tableRule = ShardingDataSource…getRuntimeContext().getRule()…getTableRule(logicTableName)

public Map<String, Set<String>> getDistTopology(final String logicTableName)
if (dataSource instanceof ShardingDataSource) {
Map<String, Set<String>> result = new HashMap<String,Set<String>>();
ShardingRule shardingRule = ((ShardingDataSource) dataSource).getRuntimeContext().getRule();
TableRule tableRule = shardingRule.getTableRule(logicTableName);
List<DataNode> list =
tableRule.getActualDataNodes();
for (DataNode node : list ){
if (result.containsKey(node.getDataSourceName())){
Set<String> tableSet = result.get(node.getDataSourceName());
tableSet.add(node.getTableName());
} else {
Set<String> tableSet = new HashSet<>();
tableSet.add(node.getTableName());
result.put(node.getDataSourceName(),tableSet);
}
}
return result;
} else {
return new HashMap<>();
}
}

最终获得的结果为:
{ds_1=[t_order_0, t_order_1], ds_0=[t_order_0, t_order_1]}

hint的使用

指定库表

HintManager instance = HintManager.getInstance();
instance.addDatabaseShardingValue(logicTable,new HintComparavleValue(physicalDb));
instance.addTableShardingValue(logicTable,new HintComparavleValue(physicalTable));
//eg
instance.addDatabaseShardingValue("t_order",new HintComparavleValue("ds_1"));
instance.addDatabaseShardingValue("t_order",new HintComparavleValue("t_order_0"));
//还有另一种写法
hintManager.setDatabaseShardingValue(3);

真正的一个t_order使用hint的例子

HintManager hintManager = HintManager.getInstance();
hintManager.addDatabaseShardingValue("t_order",new HintComparavleValue("ds_1"));
hintManager.addTableShardingValue("t_order",new HintComparavleValue("t_order_0"));
try (Connection conn = dalDataSource.getConnection();
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from t_order")){
//查看日志判断是否走指定库表
System.out.println(rs.next());
} catch (Exception e) {
e.printStackTrace();
} finally {
hintManager.clearHint();
}

清理hint线程变量

HintManager.clear();

最后

以上就是落寞毛豆为你收集整理的sharding_hint获取所有表分布的全部内容,希望文章能够帮你解决sharding_hint获取所有表分布所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部