mysql水平分库_sharding-jdbc实现水平分库 + 水平分表

1、搭建环境

(1)SpringBoot2.2.1+MyBatisPlus+Sharding-JDBC+Druid连接池

(2)创建SpringBoot工程,版本2,2,1

ed1519bf2832c30d1dffa00b5dfdb5a4.png

(3)引入相关依赖

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

com.alibaba

druid-spring-boot-starter

1.1.20

mysql

mysql-connector-java

org.apache.shardingsphere

sharding-jdbc-spring-boot-starter

4.0.0-RC1

com.baomidou

mybatis-plus-boot-starter

3.0.5

org.projectlombok

lombok

org.springframework.boot

spring-boot-maven-plugin

2、按照水平分表的方式创建数据库,创建数据库表

1)创建两个数据库

aefdad135d9193cc7a5371bb9168cf15.png

2)创建数据库和表

58080dee81c04f6997c0708803b985bb.png

3、编写代码,完成对分库分表后数据的操作

(1)创建实体类,mapper

2165cf7485d9a1289a2e08c1cfa36956.png

@Datapublic classCourse {privateLong cid;privateString cname;privateLong userId;privateString cstatus;

}

@Repositorypublic interface CourseMapper extends BaseMapper{

}

4、配置sharding-jdbc的分片策略

(1)在项目的配置文件中进行配置

#sharding-jdbc 分片策略

# 数据源名称,多数据源以逗号分隔

# 水平分库,所以要配置多数据源

spring.shardingsphere.datasource.names=m1,m2

#一个实体类对应两张表

spring.main.allow-bean-definition-overriding=true

# 第一个数据源

# 数据库连接池

spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource

#数据库驱动类名

spring.shardingsphere.datasource.m1.driver-class-name= com.mysql.cj.jdbc.Driver

# 数据库 URL 连接

spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?serverTimezone=GMT%2B8

# 数据库用户名

spring.shardingsphere.datasource.m1.username= root

# 数据库密码

spring.shardingsphere.datasource.m1.password=houchen

# 第二个数据源

# 数据库连接池

spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource

#数据库驱动类名

spring.shardingsphere.datasource.m2.driver-class-name= com.mysql.cj.jdbc.Driver

# 数据库 URL 连接

spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?serverTimezone=GMT%2B8

# 数据库用户名

spring.shardingsphere.datasource.m2.username= root

# 数据库密码

spring.shardingsphere.datasource.m2.password=houchen

# 指定数据库的分布情况 数据库里面表的分布情况

spring.shardingsphere.sharding.tables.course.actual-data-nodes=m$->{1..2}.course_$->{1..2}

#指定course表中主键的生成策略 SNOWFLAKE:雪花算法

spring.shardingsphere.sharding.tables.course.key-generator.column = cid

spring.shardingsphere.sharding.tables.course.key-generator.type =SNOWFLAKE

# 指定数据表分片的策略 约定cid值 : 偶数--》course_1 奇数-->course_2

spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column= cid

spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid%2 +1}

# 指定数据库分片的策略 约定:user_id是偶数,则将数据添加到m1的数据库中 user_id是奇数,则将数据添加到m2的数据库中

#spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column= user_id

#spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=m$->{user_id%2+1}

spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=user_id

spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m$->{user_id%2+1}

#打开sql的输出日志

spring.shardingsphere.props.sql.show = true

5、编写测试代码

@RunWith(SpringRunner.class)

@SpringBootTestpublic classShardingJdbcDdemoApplicationTest {

@AutowiredprivateCourseMapper courseMapper;//测试水平分库

@Testpublic voidtestEduCourse(){

Course course=newCourse();

course.setCname("java");

course.setUserId(100L); //偶数,按照前面的配置,应该插入到m1库

course.setCstatus("normal");

courseMapper.insert(course);

}

}

user_id为偶数,插入到m1库,cid为奇数,插入到course_2表

6667b7ebc785bc249a6b62d61e2acb35.png

1c6cbc5691cd4a057beb8780c76b340b.png

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值