SpringBoot+MyBatis+MySQL读写分离(实例)

1. 引言

读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP

然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。

2. AbstractRoutingDataSource

基于特定的查找key路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。

3. 实践

关于配置请参考:

https://www.cnblogs.com/cjsblog/p/9706370.html

3.1. maven依赖


这里,我们配置了4个数据源,1个master,2两个slave,1个路由数据源。前3个数据源都是为了生成第4个数据源,而且后续我们只用这最后一个路由数据源。

MyBatis配置


由于Spring容器中现在有4个数据源,所以我们需要为事务管理器和MyBatis手动指定一个明确的数据源。

3.3. 设置路由key / 查找数据源

目标数据源就是那前3个这个我们是知道的,但是使用的时候是如果查找数据源的呢?

首先,我们定义一个枚举来代表这三个数据源

packagecom.cjs.example.enums;

publicenumDBTypeEnum {

MASTER, SLAVE1, SLAVE2;

}

接下来,通过ThreadLocal将数据源设置到每个线程上下文中


例如,假设我们有一张表member


4. 测试


查看控制台

5. 工程结构

扩展阅读

Springboot + Mybatis,数据库多数据源配置项目Demo【源码下载】

Spring+MyBatis多数据源配置实现(实操型)

SpringBoot ( 七 ) :springboot + mybatis 多数据源最简解决方案

某小公司 RESTful、共用接口、前后端分离、接口约定的实践

MySQL 主从复制与读写分离概念及架构分析

读写一致性的一些思考

来源:http://www.cnblogs.com/cjsblog/p/9712457.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,700评论 0 4
  • 读写分离一直都是项目的标配,之前项目的做法非常简单,直接配置两个数据源,一个只读,一个只写,只读的放到xxx.re...
    我来试试168168阅读 1,728评论 0 1
  • 罄竹发信息给乐茶。 “他要离婚,他老婆要他净身出戸,二个孩子不给他,你怎么看?” “我觉得,他老婆对他有爱!” “...
    无来有阅读 443评论 0 0
  • 2018.11.23日 周五 玉洁坚持分享第153天 买好了一家人的早餐,匆忙地赶到家!妈妈正在忙着做饭,老爹听到...
    快乐舒馨阅读 210评论 0 0