读写分离 - 动态切换数据源

1 认识AbstractRoutingDataSource抽象类

这个抽象类是我们实现动态切换数据源的关键,从它的名字我们可以知道是路由数据源

这里写图片描述

从源码我们可以很清楚的知道我们覆盖方法determineCurrentLookupKey(),动态地把lookupKey传进去,resolvedDataSources是map类型是key - value类型,key存着lookupKey,value是数据源

DataSource dataSource = this.resolvedDataSources.get(lookupKey);根据你传的lookupKey返回对应的数据源

如果你没有传lookupKey,则返回预先设定好的默认数据源 dataSource = this.resolvedDefaultDataSource;

2 定义数据源

上面源码已经分析了你可以动态地指定数据源也可以使用默认的数据源,那我们就把我们配置好的传进去

这里写图片描述

我们可以清楚看见初始化目标数据源Map targetDataSources和初始化默认目标数据源defaultTargetDataSource

覆盖此方法,之前传入defaultTargetDataSource和targetDataSources

3 定义事务管理器

目前我们的环境是1台主数据库(增删改操作),一台从数据库(查操作),我们可以设置默认数据源是从数据库,当我们进行增删改操作时,可以通过注解@Transactional,通过事务管理器设置动态设置lookupKey,走主数据库

4 注意事项

springboot会自动装配数据源,因为我们现在是自定义数据源,所以记得屏蔽DataSourceAutoConfiguration

@Primary注解的使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值