yml配置: spring: main: allow-bean-definition-overriding: true # sharding-jdbc配置 shardingsphere: # 是否开启SQL显示 props: sql: show: true # ====================== ↓↓↓↓↓↓ 数据源配置 ↓↓↓↓↓↓ ====================== datasource: names: ds-master-0,ds-slave-0-1,ds-slave-0-2,ds-master-1,ds-slave-1-1,ds-slave-1-2 # ====================== ↓↓↓↓↓↓ 配置第1个主从库 ↓↓↓↓↓↓ ====================== # 主库1 ds-master-0: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://101.42.167.182:3306/test02?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT username: root password: lb123456 # 主库1-从库1 ds-slave-0-1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://43.143.198.146:3306/test02?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT username: root password: yr123456 # 主库1-从库2 ds-slave-0-2: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://43.143.198.146:3306/test02?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT username: root password: yr123456 # ====================== ↓↓↓↓↓↓ 配置第2个主从库 ↓↓↓↓↓↓ ====================== # 主库2 ds-master-1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://101.42.167.182:3306/test03?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT username: root password: lb123456 # 主库2-从库1 ds-slave-1-1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://43.143.198.146:3306/test03?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT username: root password: yr123456 # 主库2-从库2 ds-slave-1-2: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://43.143.198.146:3306/test03?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT username: root password: yr123456 sharding: # ====================== ↓↓↓↓↓↓ 分库分表配置 ↓↓↓↓↓↓ ====================== # 分库策略 => 根据user_id取模拆分到不同的库中 default-database-strategy: # inline: # sharding-column: id # algorithm-expression: ds-master-$->{id % 2} standard: shardingColumn: birthday preciseAlgorithmClassName: com.yuheng.config.BirthdayAlgorithm # 分表策略 tables: # user 逻辑表名 user: actual-data-nodes: ds-master-$->{0..1}.user$->{0..1} key-generator: column: id # 主键ID type: SNOWFLAKE # 生成策略 # 添加数据分表策略 table-strategy: inline: # 添加数据分表字段(根据字段插入数据到那个表 ex:sex) sharding-column: sex # 分片算法表达式 => 根据用户性别取模拆分到不同的表中 algorithm-expression: user$->{sex % 2} # ====================== ↓↓↓↓↓↓ 读写分离配置 ↓↓↓↓↓↓ ====================== master-slave-rules: ds-master-0: # 主库 masterDataSourceName: ds-master-0 # 从库 slaveDataSourceNames: - ds-slave-0-1 - ds-slave-0-2 # 从库查询数据的负载均衡算法 目前有2种算法 round_robin(轮询)和 random(随机) # 算法接口 org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm # 实现类 RandomMasterSlaveLoadBalanceAlgorithm 和 RoundRobinMasterSlaveLoadBalanceAlgorithm loadBalanceAlgorithmType: ROUND_ROBIN ds-master-1: masterDataSourceName: ds-master-1 slaveDataSourceNames: - ds-slave-1-1 - ds-slave-1-2 loadBalanceAlgorithmType: ROUND_ROBIN 时间分表配置类: import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; import java.util.*; public class BirthdayAlgorithm implements PreciseShardingAlgorithm<Date> { List<Date> list = new ArrayList<>(); { Calendar calendar2 = Calendar.getInstance(); calendar2.set(2021,1,1,0,0,0); Calendar calendar3 = Calendar.getInstance(); calendar3.set(2022,1,1,0,0,0); list.add(calendar2.getTime()); list.add(calendar3.getTime()); } @Override public String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) { Date date = preciseShardingValue.getValue();//获得属性真实值 Iterator<String> iterator = collection.iterator();//数据源列表 String target = null; for (Date dt : list){ target = iterator.next(); if (date.before(dt)){ break; } } return target; } } 依赖包: <!--依赖sharding--> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-core-common</artifactId> <version>4.0.0-RC1</version> </dependency>
shardingJDBC(读写分离+分库分表)yml配置
于 2022-10-19 16:34:32 首次发布