1. 引言
在开发过程中,避免不了需要同时操作多个数据库的情况,通常的应用场景如下 :
- 数据库高性能场景:主从,包括一主一从,一主多从等,在主库进行增删改操作,在从库进行读操作。
- 数据库高可用场景:主备,包括一往一备,多主多备等,在数据库无法访问时可以切换。
- 同构或异构数据的业务处理:需要处理的数据存储在不同的数据库中,包括同构(如都是 MySQL ),异构(如一个MySQL ,另外是 PG 或者 Oracle )。
使用 Spring Boot 该如何处理多个数据库的读写,一般有以下几种策略:
- 多套数据源:即针对一个数据库建立一套数据处理逻辑,每套数据库都包括数据源配置、会话工厂( sessionFactory )、连接、SQL 操作、实体。各套数据库相互独立。
- 动态数据源:确定数量的多个数据源共用一个会话工厂,根据条件动态选取数据源进行连接、SQL 操作。
- 参数化变更数据源:根据参数添加数据源,并进行数据源切换,数据源数量不确定。通常用于对多个数据库的管理工作。
本系列文章“搞定SpringBoot多数据源”将针对以上几个策略进行描述,本文是第一篇:“多套数据源”,主要以主从场景为实例,结合代码,对多套数据源的实现进行描述,内容包括搭建 Spring Boot + MyBatis Plus 工程、多数据源配置、多数据源处理与使用逻辑。
本文所涉及到的示例代码:https://github.com/mianshenglee/my-example/tree/master/multi-datasource,读者可结合一起看。
2. 运行环境
- JAVA 运行环境: JDK1.8
- Spring Boot: 2.2.2.RELEASE
- MyBatis Plus: 3.3.0
- 开发IDE: IDEA
- 构建工具Maven: 3.3.9
- MySQL : 5.6.26
- Lombok: 1.18.10
3. 多套数据源
多套数据源,顾名思义每一个数据库有一套独立的操作。从下往上,数据库、会话工厂、DAO操作,服务层都是独立的一套,如下所示:
![f78bbc0ce9e3019ce30fa11f3508dea6.png](https://img-blog.csdnimg.cn/img_convert/f78bbc0ce9e3019ce30fa11f3508dea6.png)
本示例中,以一主一从两个数据库,两数据库的分别有一个表 test_user,表结构一致,为便于说明,两个表中的数据是不一样的。两个表结构可在示例代码中的 sql 目录中获取。
3.1 搭建 Spring Boot 工程
3.1.1 初始化 Spring Boot 工程
使用 spring.io构建初始 Spring Boot 工程,选用以下几个构件:
- Lombok: 用于简化操作
- Spring Configuration Processor:配置文件处理器
- Spring Web: 用于构建web服务
- MySQL Driver: 数据库驱动
3.1.2 添加 MyBatis Plus 依赖
MyBatis Plus 是对 MyBatis 增强,简化 DAO 操作,提高数据库操作效率。依赖如下