概述
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获取所有表分布所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复