Spring Boot 动态数据源
利用AOP来实现多数据源的动态切换功能。
1.前言
AbstractRoutingDataSource是Spring2.0.1版本引入的一个抽象类,它提供了多数据源的支持能力。AbstractRoutingDataSource抽象类定义了抽象的determineCurrentLookupKey方法,子类只需实现此方法,进而动态确定要使用的数据源。
AbstractRoutingDataSource
public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {
@Nullable
private Map
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 调用determineCurrentLookupKey方法来获取数据源名称key
- 从resolvedDataSources属性中得到对应的DataSource对象。
- 如果找不到DataSource对象或者数据源名称key不存在则使用resolvedDefaultDataSource。
2.实现思路
- 提前准备好多个数据源
- 将其存入一个Map中 (Map的Key是对应数据源的名称,而Value则是对应的数据源)
- 将Map设置到AbstractRoutingDataSource对象的resolvedDataSources属性中
- 当执行数据库操作的时候就通过一个Key来从Map中获取对应的数据源实例
- 执行对应的数据库操作
3.项目实战
3.1 项目初始化
新建一个spring的项目:multi-source
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.7.0
cn.flowboot
multi-source
0.0.1-SNAPSHOT
multi-source
multi-source
1.8
3.5.2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19