shardingjdbc使用详解

    技术2022-07-11  83

    1.在已有的项目中添加jar包依赖

    <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency>

    2.Java方法添加分片配置

    @Bean(name = "myDataSource") public DataSource getShardingDataSource(@Qualifier("dataSourceOld") DataSource dataSource01) throws SQLException { ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration()); shardingRuleConfig.getBindingTableGroups().add("bqhealth_cloud_main_index"); shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("type", new MainIndexPreciseShardingAlgorithm())); Properties properties = new Properties(); properties.setProperty("sql.show", sqlShow); return ShardingDataSourceFactory.createDataSource(createDataSourceMap(dataSource01), shardingRuleConfig, properties); } TableRuleConfiguration getOrderTableRuleConfiguration() { TableRuleConfiguration result = new TableRuleConfiguration("main_index", "db.main_index_${0..2}"); return result; } Map<String, DataSource> createDataSourceMap(DataSource dataSource) { Map<String, DataSource> result = new HashMap<>(); result.put("db", dataSource); return result; }

    3.添加分片策略类

    @Slf4j public class MainIndexPreciseShardingAlgorithm implements PreciseShardingAlgorithm<Integer> { @Override public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Integer> shardingValue) { for (String tableName : availableTargetNames) { if (tableName.endsWith(shardingValue.getValue() + "")) { // 添加分片规则 //log.info("doSharding >> shardingValue = {}, tableName = {}", shardingValue, tableName); return tableName; } } throw new IllegalArgumentException(); } }
    Processed: 0.012, SQL: 9