目录:
- Spring Boot中实现多数据源动态切换效果(1):通过继承AbstractRoutingDataSource类实现
- Spring Boot中实现多数据源动态切换效果(2):通过开源项目
Dynamic Datasource Spring Boot Starter
实现
在Spring Boot中,可以通过多种方式实现多数据源的动态切换效果,在本篇文章中我介绍第二种实现方案。
一 具体实现
(1)测试使用的数据库
这里我们创建3个数据库,分别是:db01
、db02
、db03
,然后这3个数据库都有一张名为user_info
的表,表结构一样,只是数据不同。
1 | mysql复制代码-- 建表语句 |
(2)在pom.xml文件中添加相关依赖
1 | xml复制代码<dependency> |
最新版本:mvnrepository.com/artifact/co…
(3)新增application-datasource2.yml
配置文件
新建这个用于测试的配置文件,主要配置了接下来需要用到的多个数据源,其配置如下:
1 | yaml复制代码server: |
(4)新建一个测试使用的Mapper
在上篇文章的基础上,再新建一个测试使用的Mapper
,跟上篇文章的那个Mapper
类似,只是使用的注解不同而已。
1 | java复制代码package cn.zifangsky.example.webexercise.mapper; |
其对应的UserInfoDynamicMapper.xml
文件(文件内容除了类路径不同,其他跟上篇文章的那个Mapper.xml
一样)是:
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
(5)使用单元测试测试「动态切换数据源」的效果
1 | java复制代码package cn.zifangsky.example.webexercise.dataSource; |
注:以上测试代码基于Junit5 测试框架编写,需要的依赖如下:
1 | xml复制代码<dependency> |
运行单元测试后,其测试结果跟上篇文章一样,这里就省略截图吧。
二 这两种方案如何选择
我看了一下开源项目Dynamic Datasource Spring Boot Starter
的源代码,发现它也有一个DynamicRoutingDataSource
(com/baomidou/dynamic/datasource/DynamicRoutingDataSource.java),然后具体的实现逻辑跟我在上篇文章中介绍的那种方案实际也是类似的。
不过,通过查看这个开源项目的官方文档可以得知,这个项目支持的特性比较丰富,截止目前有以下这些:
然后,经过了多次更新迭代后,这个开源项目也相对比较稳定。因此,在这里我给出的建议是:
- 如果想要实现简单,或者说想要将以上截图中的部分特性拿来就用,那么可以考虑使用这个开源项目;
- 如果想要实现的功能比较单一,而且有尽可能减少外部依赖的需求,那么通过上篇文章介绍的方案来手动实现也是可以的。
参考:
本文转载自: 掘金