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; }