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

相关推荐
是店小二呀2 分钟前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
canonical_entropy14 分钟前
金蝶云苍穹的Extension与Nop平台的Delta的区别
后端·低代码·架构
我叫啥都行1 小时前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
无名指的等待7122 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
.生产的驴2 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
AskHarries3 小时前
Spring Boot利用dag加速Spring beans初始化
java·spring boot·后端
苹果酱05673 小时前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱4 小时前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
计算机学姐6 小时前
基于python+django+vue的影视推荐系统
开发语言·vue.js·后端·python·mysql·django·intellij-idea
JustinNeil6 小时前
简化Java对象转换:高效实现大对象的Entity、VO、DTO互转与代码优化
后端