spring boot+sharding jdbc实现读写分离

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一起,每天不一样!

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发3 天前
软件工程SOLID 五大设计原则
后端·软件工程