sharding_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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值