ShardingSphere 5.0 分库分表java写法

ShardingSphere 5.0 分库分表 java写法 官方文档描述很少,需要稍微摸索下,简单例子如下:

//主要就是这个数据源,java写法可以在需要分表的方法上注入配好的分库分表数据源或者通过切面自动切换数据源

@Bean(name = "shardingDataSource")
@Qualifier("shardingDataSource")
DataSource getShardingDataSource(@Qualifier("ds0") DataSource ds0, @Qualifier("ds1") DataSource ds1) throws SQLException {
   String schemaName = "sharding"; // Indicate logic schema name
   ModeConfiguration modeConfig = new ModeConfiguration("Memory",null,false); // Build mode configuration
   Map<String, DataSource> dataSourceMap = createDataSourceMap(ds0,ds1);// Build actual data sources
   Collection<RuleConfiguration> ruleConfigs = new LinkedList<>();
   ruleConfigs.add(getShardingRuleConfiguration());
   Properties props = new Properties() ;
   props.put("sql-show",true);
   return ShardingSphereDataSourceFactory.createDataSource(schemaName, modeConfig, dataSourceMap, ruleConfigs, props);
}


ShardingRuleConfiguration getShardingRuleConfiguration() {
   ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
   //配置各个表的分库分表策略
   shardingRuleConfig.getTables().add(getTableRuleConfiguration());


       // 分库
   Properties dbShardingAlgorithmrProps = new Properties();
   dbShardingAlgorithmrProps.setProperty(
         "algorithm-expression",
         "ds${user_id % 2}"
   );
   shardingRuleConfig.getShardingAlgorithms().put(
         "dbShardingAlgorithm",
         new ShardingSphereAlgorithmConfiguration("INLINE", dbShardingAlgorithmrProps));

   //分表
   Properties tableShardingAlgorithmrProps = new Properties();
   tableShardingAlgorithmrProps.setProperty(
         "algorithm-expression",
         "t_test_${org_id % 2}");

   shardingRuleConfig.getShardingAlgorithms().put(
         "tableShardingAlgorithm", new ShardingSphereAlgorithmConfiguration("INLINE", tableShardingAlgorithmrProps));

         //配置默认分表规则
   shardingRuleConfig.setDefaultTableShardingStrategy(new NoneShardingStrategyConfiguration());
   return shardingRuleConfig;
}

/**
 * 具体分库分表规则配置
 * @return
 */
ShardingTableRuleConfiguration getTableRuleConfiguration() {
   ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_test","ds${0..1}.t_test_${0..1}");
   //配置分库策略
   result.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("user_id","dbShardingAlgorithm"));
   //配置分表策略
   result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("org_id", "tableShardingAlgorithm"));
   return result;
}



Map<String, DataSource> createDataSourceMap(DataSource ds0, DataSource ds1) {
   final Map<String, DataSource> targetDataSources = new HashMap<>();
   targetDataSources.put("ds0", ds0);
   targetDataSources.put("ds1", ds1);
   return targetDataSources;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值