Java读写分离实战
一、目标:
读操作走从库,写操作走主库 —— 实现读写分离
二、实现步骤:
本文是基于基于 ShardingSphere 读写分离,通过修改配置文件形式实现读写分离。
1. 修改 spring.shardingsphere.datasource
配置,加上主从库定义
spring:shardingsphere:datasource:names: master,slavemaster:# 你的原 community 配置放这里slave:# 你的原 nonmotor 配置放这里rules:readwrite-splitting:data-sources:community: # 逻辑数据源名(不要与物理重名)static-strategy:write-data-source-name: masterread-data-source-names: slaveload-balancer-name: round_robin
三、结构简介:
两个物理数据源(数据库连接)——master
和 slave
。
-
master
: 主库(负责写操作) -
slave
: 从库(负责读操作)
读写分离规则配置 :
rules:
readwrite-splitting:
data-sources:
community: # 逻辑数据源名(业务代码中访问的名称)
逻辑数据源 叫 community
,它是一个抽象名称,对应一套“读写分离”的规则组合。你在业务代码中注入的是这个名字(不是 master
或 slave
)。
静态读写分离策略:
static-strategy:
write-data-source-name: master
read-data-source-names: slave
-
所有 写请求(INSERT/UPDATE/DELETE) 都路由到
master
数据源。 -
所有 读请求(SELECT) 都路由到
slave
数据源。
负载均衡器配置:
load-balancer-name: round_robin
load-balancers:
round_robin:
type: ROUND_ROBIN
-
多个
slave
节点,可以通过ROUND_ROBIN
(轮询)方式在多个从库之间分发读取请求。 -
当前虽然你只定义了一个
slave
,但这个配置是为了后续扩展预留的。
在 Spring Boot 项目中配置 ShardingSphere 实现数据库读写分离 —— 所有写操作走主库 master
,所有读操作走从库 slave
,并通过逻辑数据源 community
对外提供统一的数据访问入口。