shigen
日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
在shigen
之前的文章中,写到了Springboot +mybatis plus实现读写分离,没有sharding-jdbc
的夹持,真的是举步维艰啊。在接触这个神器之后,发现之前的代码很难改了,于是就在前一篇文章spring boot+sharding jdbc实现分库分表的基础上再次的修改。基础的配置这里不再展开了,需要的话可以参考之前的文章。
我们先启动之前的mysql主从服务:
当然,要去检查同步的状态(一般的服务是不会随意重启的,我这是在我的mac上):
ini
show slave status \G;
start slave;
发现数据是可以同步的,那目前为止,我们的主从服务搭建好了。现在我们开始写代码。
在此之前,我们已经写过了分库分表的配置,那我们要怎么区分呢?shigen
是这样的设计:
yaml
spring:
profiles:
active: masterslave
这里主要是用profile
来区分的,类似于spring boot
的多环境配置。这也算是一个技巧,现在正式开始代码的设计。
修改配置文件
yaml
spring:
shardingsphere:
datasource:
names: ds0, ds1
ds0:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3310/test
username: root
password: root
ds1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3311/test
username: root
password: root
sharding:
master-slave-rules:
masterslave:
#主数据库,用于数据写入
master-data-source-name: ds0
slave-data-source-names: ds1
#load-balance-algorithm-class-name= #从库负载均衡算法类名称。该类需实现MasterSlaveLoadBalanceAlgorithm接口且提供无参数构造器
#从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若`load-balance-algorithm-class-name`存在则忽略该配置
load-balance-algorithm-type: RANDOM
props:
sql:
show: true
额,好像也没啥吧,其实就是简单的配置,除了我们需要自定义些负载均衡算法之类的。
需要声明的是我现在主从数据库的表结构和现有的实体类字段不对应,所以会出现报错的。但是我们的预期效果是这样的:
- 查询:走从库(ds1)
- 添加:走主库(ds0)
测试查询
测试新增
可以看到基于我的测试,各种结果都是符合预期的。后期有实际的应用的话,我们在继续分享哈。
以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注
支持一下哈,您的鼓励和支持将是shigen
坚持日更的动力。同时,shigen
在多个平台都有文章的同步,也可以同步的浏览和订阅:
平台 | 账号 | 链接 |
---|---|---|
CSDN | shigen01 | shigen的CSDN主页 |
知乎 | gen-2019 | shigen的知乎主页 |
掘金 | shigen01 | shigen的掘金主页 |
腾讯云开发者社区 | shigen | shigen的腾讯云开发者社区主页 |
微信公众平台 | shigen | 公众号名:shigen |
与shigen
一起,每天不一样!