在介绍动态数据源之前,我们先一起来看看多数据源在 Spring Boot 中的实现方式。
2.1、数据库准备
创建两个库,分别是db_test_1
和db_test_2
。db_test_1
数据库中创建一张用户表,脚本如下:
db_test_2
数据库中创建另一张账户表,脚本如下:
2.2、工程环境准备
pom.xml
中添加相关的依赖包,示例如下:
<!--spring boot核心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring boot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--aspectj 注解代理-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
2.3、编写多数据源
2.3.1、创建动态数据源服务类
首先,创建一个DynamicDataSource
类,并继承AbstractRoutingDataSource
抽象类,同时重写determineCurrentLookupKey()
方法,代码示例如下:
2.3.2、创建动态数据源缓存类
创建一个DataSourceContextHolder
类,用于缓存数据源,同时需要确保线程环境下安全
package com.example.dynamic.datasource.config;
publicclass DataSourceContextHolder {
/**
* 设置线程独立变量,用于存储数据源唯一标记
*/
pri