springboot+mybatis实现数据库的读写分离

介绍

随着业务的发展,除了拆分业务模块外,数据库的读写分离也是常见的优化手段。
方案使用了AbstractRoutingDataSourcemybatis plugin来动态的选择数据源
选择这个方案的原因主要是不需要改动原有业务代码,非常友好

注:
demo中使用了mybatis-plus,实际使用mybatis也是一样的
demo中使用的数据库是postgres,实际任一类型主从备份的数据库示例都是一样的
demo中使用了alibaba的druid数据源,实际其他类型的数据源也是一样的

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

环境

首先,我们需要两个数据库实例,一为master,一为slave。
所有的写操作,我们在master节点上操作
所有的读操作,我们在slave节点上操作

需要注意的是:对于一次有读有写的事务,事务内的读操作也不应该在slave节点上,所有操作都应该在master节点上

先跑起来两个pg的实例,其中15432端口对应的master节点,15433端口对应的slave节点:

docker run \
	--name pg-master \
	-p 15432:5432 \
	--env 'PG_PASSWORD=postgres' \
	--env 'REPLICATION_MODE=master' \
	--env 'REPLICATION_USER=repluser' \
   	--env 'REPLICATION_PASS=repluserpass' \
	-d sameersbn/postgresql:10-2

docker run \
	--name pg-slave \
	-p 15433:5432 \
	--link pg-master:master \
	--env 'PG_PASSWORD=postgres' \
	--env 'REPLICATION_MODE=slave' \
	--env 'REPLICATION_SSLMODE=prefer' \
	--env 'REPLICATION_HOST=master' \
	--env 'REPLICATION_PORT=5432' \
	--env 'REPLICATION_USER=repluser' \
   	--env 'REPLICATION_PASS=repluserpass' \
	-d sameersbn/postgresql:10-2

实现

整个实现主要有3个部分:

  • 配置两个数据源
  • 实现AbstractRoutingDataSource来动态的使用数据源
  • 实现mybatis plugin来动态的选择数据源

配置数据源

将数据库连接信息配置到application.yml文件中

spring:
  mvc:
    servlet:
      path: /api

datasource:
  write:
    driver-class-name: org.postgresql.Driver
    url: "${DB_URL_WRITE:jdbc:postgresql://localhost:15432/postgres}"
    username: "${DB_USER
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值