SpringCloud下结合shardingSphere进⾏分库分表(inline表达式
简单实现)
本例主要参看官⽅的配置进⾏作业,实现简单的mod算法分库分表,对于分库分表的理解⽐较合适。
⽣产环境上建议⾃定义分库分表⽤算法(下⼀篇随笔介绍)。
1)关键部分的pom依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2)关键yml配置:
2.1)数据源:6个数据源,两个集,分别为1主2从;
主1:master0;从1:master0salve0;从2:master0slave1
主2:master1;从1:master1slave0;从2:master1slave1
2.2)作为demo演⽰,会员表进⾏分库和分表;每个库⾥有两张表:mc_member0和mc_member1;
2.3)分库规则:gender=1(男)时 gender%2 -> master1库; gender=2(⼥)时 gender%2 -> master0库;
2.4)分表规则:id偶数时,id%2->mc_member0表;id为奇数时,id%2->mc_member1表;
2.5)注意事项1:对逻辑表配置分⽚策略时,数据库分⽚策略设置逻辑数据源,不使⽤物理库名;表分⽚策略内,使⽤物理表名;
2.6)配置读写分离:master-slave-rules下的rule逻辑名可以⾃定义如 ms1和ds1等。
sharding:
jdbc:
datasource:
names: master0,master0salve0,master0slave1,master1,master1slave0,master1slave1
master0:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mcspcsharding0?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
master0salve0:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mcspcsharding0s0?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
master0slave1:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mcspcsharding0s1?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
master1:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mcspcsharding1?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
master1slave0:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mcspcsharding1s0?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8 username: root
password: root
master1slave1:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mcspcsharding1s1?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8 username: root
password: root
config:
sharding:
tables:
mc_member:
actual-nodes: mcspcsharding$->{0..1}.mc_member$->{0..1}
database-strategy:
inline:
sharding-column: gender
algorithm-expression: master$->{gender % 2}
table-strategy:
inline:
sharding-column: id
algorithm-expression: mc_member$->{id % 2}
binding-tables: mc_member # 多个时逗号隔开
broadcast-tables: mc_master
master-slave-rules:
ms0:
master-data-source-name: master0
slave-data-source-names: master0salve0,master0slave1
ms1:
master-data-source-name: master1
slave-data-source-names: master1slave0,master1slave1
props:
sql:
show: true
3)启动类。因为数据源的重复注⼊问题,需要进⾏如下配置:
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
package spcshardingdbtable;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import t.annotation.ComponentScan;
import ansaction.annotation.EnableTransactionManagement;
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
@EnableDiscoveryClient
springcloud和springboot@EnableTransactionManagement
@ComponentScan(basePackages = {"com.chongmon","spcshardingdbtable"})
public class McSpcShardingDbTableApplication {
public static void main(String[] args) {
SpringApplication.run(McSpcShardingDbTableApplication.class, args);
}
}
其他的sever和repository等不在贴码,⾃⼰试验下应该很容易实现。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论