实现步骤
前言
在上一篇文章中我们实现了水平分库分表,
水平分表,也就是两张列,字段完全相同的表在同一个数据库中
水平分库是把同一个表的 数据 按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上
这篇文章来完成水平分库分表之操作公共表
需求说明
在一个分库分表的数据库系统中,很多时候需要有一些公共资源表,对于这些公共资源表该怎么操作其数据呢? 本文就是详细操作一下
数据库表创建
如图所示:
编写程序代码
项目主体代码依然使用 上一篇文章 的,只是添加一些代码而已
引入maven依赖
主要依赖如下,其它依赖自行引入
<!-- 分库分表的包-->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC2</version>
</dependency>
实体类
dao层
Mappr接口!
Mappr.xml文件
service 层
controller 层
application.properties 文件
#设置端口号
server.port=6607
#设置命名
spring.application.name=product-server
#循环读取mapper文件
mybatis.mapper-locations=classpath:/mappers/*.xml
#bean覆盖
#spring.main.allow-bean-definition-overriding=true
#数据源名称,多数据源以逗号分隔,自定义数据源名称为 m1和m2
spring.shardingsphere.datasource.names=m1,m2
#数据库连接池类名称
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
#数据库驱动类名
spring.shardingsphere.datasource.m1.dirver-class-name=com.mysql.cj.jdbc.Driver
#数据库url连接
spring.shardingsphere.datasource.m1.url=jdbc:mysql://127.0.0.1:3306/product_db1?serverTimezone=Asia/Shanghai
#数据库用户名
spring.shardingsphere.datasource.m1.username=root
#数据库密码
spring.shardingsphere.datasource.m1.password=123456
#数据库连接池类名称
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
#数据库驱动类名
spring.shardingsphere.datasource.m2.dirver-class-name=com.mysql.cj.jdbc.Driver
#数据库url连接
spring.shardingsphere.datasource.m2.url=jdbc:mysql://127.0.0.1:3306/product_db2?serverTimezone=Asia/Shanghai
#数据库用户名
spring.shardingsphere.datasource.m2.username=root
#数据库密码
spring.shardingsphere.datasource.m2.password=123456
#指定公共表
spring.shardingsphere.sharding.broadcast-tables=shop
spring.shardingsphere.sharding.tables.shop.actual-data-nodes=m$->{1..2}.shop
spring.shardingsphere.sharding.tables.shop.keyGenerator.column=id
spring.shardingsphere.sharding.tables.shop.keyGenerator.type=SNOWFLAKE
#日志
spring.shardingsphere.props.sql.show=true
logging.level.root = info
logging.level.org.springframework.web = info
logging.level.com.itheima.dbsharding = debug
logging.level.druid.sql = debug
接口测试
数据库插入测试
启动项目,使用 postman == 测试接口 == http://localhost:6607/product/insetProduct,结果如下!
成功后:雪花算法会生成 一个id
再看看 product_db1 数据库中的 product_1表数据,如下
在看看控制台 SQL 日志,如下
再看看数据库 prodcut_db2 中的product_2表数据,依然是空的
数据库查询测试
启动项目,使用 ==postman == 测试接口 http://localhost:6607/shop/selectShop?id=791344532078723073 ,结果如下!
在看看控制台 SQL 日志,如下
prodcut_db1和 prodcut_db2两个数据库中的表 shop都有新增的数据,也就是说这个公共表里面的数据是同步的,是有完全相同的数据的=