springboot多数据源配置实例

本文档详细介绍了SpringBoot中实现多数据源配置的步骤和关键代码,包括DataSourceType枚举、DataSourceUtil工具类、MybatisConfig配置、DynamicDataSource动态数据源以及DataSourceAspect数据源切换切面的实现。通过注解和线程局部变量实现数据源的切换,并提供了测试用例以验证数据源的正确切换。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

这里我们使用两个数据库, 但是数据库的表结构一致(至少多数据源涉及到的表需要结构一致), 以避免不能共用一套代码

DataSourceType

public enum DataSourceType {

//NONE用来返回默认

NONE(“”),

DB1(“db1”),

DB2(“db2”),

;

//省略部分代码

}

复制代码

此文件是数据源的枚举, 这里的枚举我们只配置里一个参数, 可以依据业务扩展. 本枚举的值代表数据源的名称, 是和配置文件里的配置对应上的

另外说明一下, NONE是用来代表默认数据源的, 是为了方便编程添加的, 不是必须的

DataSourceUtil

public class DataSourceUtil {

private static final ThreadLocal localDataSource = new ThreadLocal<>();

private DataSourceUtil(){

}

public static DataSourceType get() {

return localDataSource.get();

}

public static void set(DataSourceType type){

localDataSource.set(type);

}

public static void remove() {

localDataSource.remove();

}

}

复制代码

数据源切换工具类, 这里的核心是ThreadLocal<DataSourceType>变量, ThreadLocal以前有过文档分析, 主要是用来维护线程内部变量的, 其中:

  • get()方法用来获取数据源

  • set()方法用来设置数据源

  • remove()用来清除数据源

MybatisConfig*

@Configuration

@MapperScan(“jin.panpan.database.dao”)

public class MybatisConfig {

//默认数据源

@Primary

@Bean(“db1”)

@ConfigurationProperties(prefix = “spring.datasource.db1”)

public DataSource dataSource1(){

return DataSourceBuilder.create().build();

}

@Bean(“db2”)

@ConfigurationProperties(prefix = “spring.datasource.db2”)

public DataSource dataSource2(){

return DataSourceBuilder.create().build();

}

//动态数据源选择

@Bean

public DynamicDataSource dynamicDataSource(@Qualifier(“db1”) DataSource db1,

@Qualifier(“db2”) DataSource db2){

Map<Object, Object> map = new HashMap<>();

//此处的key 要和DynamicDataSource类的determineCurrentLookupKey方法返回值一致

map.put(DataSourceTy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值