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

相关推荐
盖世英雄酱581362 小时前
Java 组长年终总结:靠 AI 提效 50%,25 年搞副业只赚 4k?
后端·程序员·trae
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
code bean3 小时前
Flask图片服务在不同网络接口下的路径解析问题及解决方案
后端·python·flask
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
努力的小郑3 小时前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
颜淡慕潇5 小时前
深度解析官方 Spring Boot 稳定版本及 JDK 配套策略
java·后端·架构
Victor3565 小时前
Hibernate(28)Hibernate的级联操作是什么?
后端
Victor3565 小时前
Hibernate(27)Hibernate的查询策略是什么?
后端
superman超哥6 小时前
Rust 内部可变性模式:突破借用规则的受控机制
开发语言·后端·rust·rust内部可变性·借用规则·受控机制
柒.梧.6 小时前
Spring核心知识全解析:从入门实战到进阶
java·后端·spring