Java中mysql的读写分离_JAVA学习之路---mysql读写分离

1.mysql读写分离,我们需要在数据源配置文件中配置多个数据源

2.自定义动态切换数据源DynamicDataSource,继承AbstractRoutingDataSource,该类有实现了DataSource接口

0818b9ca8b590ca3270a3433284dd417.png

然后我们打开DynamicDataSource继承的AbstractRoutingDataSource

0818b9ca8b590ca3270a3433284dd417.png

如上图所示我们在图1中设置了targetDataSources目标数据源和defaultTargetDataSource默认数据源

0818b9ca8b590ca3270a3433284dd417.png

如上图所示可以看到,拿到targetDataSources,然后遍历targetDataSources放入到resolvedDataSources(在图2中也标识出来了),如果我们设置了默认的数据源,赋值给resolvedDefaultDataSource

0818b9ca8b590ca3270a3433284dd417.png

该类中两个getConnection方法都调用了determineTargetDataSource()方法,接下里我们看看determineTargetDataSource()

0818b9ca8b590ca3270a3433284dd417.png

从上图我们可以看出,获取connection之前我们首先要获取key,然后通过key找到我们对应的数据源对象,如果找到不数据源对象,那么就使用默认的数据源。

0818b9ca8b590ca3270a3433284dd417.png

重写该方法,然后返回数据源对应的key,在图1中定义的key有

0818b9ca8b590ca3270a3433284dd417.png

我们可以定义一个切面,用来处理业务层的方法,如果不是get、find、select、search等开头的我们应该把master作为key可以设置在ThreadLocal中,然后在连接数据库的时候,会走我们自定义DynamicDataSource中重写的determineCurrentLookupKey()方法,该方法从ThreadLocal中获取在切面中放入的key,通过key就可以找到我们需要的数据源对象了。

就可以实现的读写分离操作了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值