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

相关推荐
IT_陈寒15 分钟前
SpringBoot 3.2新特性实战:这5个隐藏技巧让你的应用性能飙升50%
前端·人工智能·后端
小奏技术1 小时前
LLM 交互的“省钱”新姿势:JSON 已死,TOON 当立
后端·aigc
用户21411832636021 小时前
mcp-server案例分享-即梦MCP-Server实战教程-让Claude直接调用AI生图视频能力
后端
后端小张1 小时前
【JAVA 进阶】Spring Boot 注解体系与工程实践
java·开发语言·spring boot·后端·spring·spring cloud·java-ee
9号达人1 小时前
接口设计中的扩展与组合:一次Code Review引发的思考
java·后端·面试
柠石榴1 小时前
GO-1 模型本地部署完整教程
开发语言·后端·golang
LaoZhangAI2 小时前
Gemini 2.5 Flash Image API尺寸设置完整指南:10种宽高比详解
前端·后端
考虑考虑2 小时前
springboot中yml、yaml、properties加载顺序
spring boot·后端·spring
想用offer打牌2 小时前
seata的JacksonUndoLogParser回滚SerialArray类型的序列化和反序列化解析
后端·开源·github