当前位置: 首页 > news >正文

基于Sharding-JDBC的读写分离

1.整体架构

image

2.详细配置

2.1 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent><groupId>com.example</groupId><artifactId>my-springboot-project</artifactId><version>1.0.0</version><name>my-springboot-project</name><description>Spring Boot project with MyBatis Plus and ShardingJDBC</description><properties><java.version>17</java.version><mybatis-plus.version>3.5.3.1</mybatis-plus.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><repositories><repository><id>maven-central</id><url>https://repo.maven.apache.org/maven2</url></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url></repository></repositories><dependencies><!-- spring boot 相关配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- db相关配置 --><!-- mysql connector --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!-- shrding jdbc --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2.2 yml文件

# Spring Boot配置
spring:
application:name: my-springboot-project
# ShardingSphere读写分离配置:一主两从
shardingsphere:mode:type: Standalonerepository:type: Fileprops:path: ./shardingspheredatasource:names: master,slave1,slave2# 主库配置:用于写操作master:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://service1:3311/test?useSSL=false&serverTimezone=Asia/Shanghai&failOverReadOnly=false&connectTimeout=10000&socketTimeout=60000username: rootpassword: 123456minimum-idle: 5maximum-pool-size: 20connection-timeout: 30000idle-timeout: 600000max-lifetime: 1800000# 从库1配置:用于读操作slave1:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://service2:3312/test?useSSL=false&serverTimezone=Asia/Shanghai&failOverReadOnly=false&connectTimeout=10000&socketTimeout=60000username: rootpassword: 123456minimum-idle: 5maximum-pool-size: 20connection-timeout: 30000idle-timeout: 600000max-lifetime: 1800000# 从库2配置:用于读操作slave2:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://service3:3313/test?useSSL=false&serverTimezone=Asia/Shanghai&failOverReadOnly=false&connectTimeout=10000&socketTimeout=60000username: rootpassword: 123456minimum-idle: 5maximum-pool-size: 20connection-timeout: 30000idle-timeout: 600000max-lifetime: 1800000rules:readwrite-splitting:data-sources:user-ds:write-data-source-name: masterread-data-source-names: slave1,slave2load-balancer-name: randomload-balancers:random:type: RANDOMprops:sql-show: truesql-simple: false
logging:level:root: INFO# MyBatis Plus配置
mybatis-plus:
configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.entity
global-config:db-config:logic-delete-field: statuslogic-delete-value: 0logic-not-delete-value: 1

3.测试

执行单一读操作,走从库。
image
执行单一写操作,走主库。
image

MySQL所有语句均以事务为单位执行。
一个事务中,包含任一写操作,走主库。
一个事务中,没有任何写操作,走从库。

例如
读写操作,包含在同一个事务中,这个事务存在写操作,整个事务的读写都走主库。
读写操作,未包含在同一个事务中,读写都是单独的事务,读走从库,写走主库。

http://www.jsqmd.com/news/22746/

相关文章:

  • 2025年空调维保/末端保养/空调清洗/水处理厂家推荐排行榜:专业维护与高效服务口碑之选
  • XML-RPC接口安全漏洞分析与防护
  • 102302135_陈霖_作业1
  • InnoDB 存储引擎
  • 20232320 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025年中央空调主机保养/维修/清洗/维保/维护公司推荐排行榜,水处理维保,物业公司/医院/写字楼/商场中央空调主机维保公司精选
  • 251025 模拟测 总结
  • 参考文献
  • [java 锁 02 - synchronized vs ReentrantLock ]
  • AI Agent 与 Agentic AI 系统:真正的区别是什么?
  • 2025 年 10 月门窗十大品牌榜单揭晓,聚焦专业制造与品牌口碑的品质之选
  • [LangChain] 09.LCEL
  • 2025年饮料包装设备厂家权威推荐榜:缠膜机/吹瓶机/膜包机/杀菌机/水处理/套标机/贴标机/洗瓶机/卸垛机/旋盖机/液氮机/装箱机/灌装生产线/一条龙生产线/配件/灌装机
  • 算法与数据结构 9 - 重链剖分
  • 2025 年 10 月 AI 写标书系统最新推荐,技术实力与市场口碑深度解析
  • AI浏览器comet拉新,一单20美元(附详细教程)
  • 大样例通过后无法AC的可能
  • 若依前后端分离版学习笔记(十八)——页面权限,页签缓存以及图标,字典,参数的利用
  • Spring Cloud Gateway网关路由配置 - AlanLee
  • 重构学习认知:从听讲、践行到教学的启示
  • 【c++】红黑树的部分构建
  • 域登录态分享(类sso)
  • ssh原理
  • 实现一个简易版本的IOC
  • Alibaba Cloud Linux 4 安装docker后,修复docker的方法
  • MPK(Mirage Persistent Kernel)源码笔记(2)--- 多层结构化图模型
  • day000 ML串讲
  • 我的学习方式破局思考 ——读《认真听讲》、《做中学》与《做教练》有感
  • cmd运行python文件
  • Unity协程除了实现功能还可以增加可读性