博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring+mybitas 实现多数据源动态切换
阅读量:6616 次
发布时间:2019-06-24

本文共 1534 字,大约阅读时间需要 5 分钟。

1 由于项目需要,需要将不同来源的数据存入不同的数据库,所以需要根据入参的信息动态切换数据源

项目core层采用了spring+mybitas 方式进行架构

1 在spring的配置中定义两个数据源

2创建一个新的类 MultiDataSource

public class MultiDataSource extends AbstractRoutingDataSource {

private static final ThreadLocal
dataSourceKey = new InheritableThreadLocal
();public static void setDataSourceKey(String dataSource) { dataSourceKey.set(dataSource);}@Overrideprotected Object determineCurrentLookupKey() { return dataSourceKey.get();}

}

这个类需要继承 AbstractRoutingDataSource

并且重写 determineCurrentLookupKey方法
3 在spring 的配置文件中新增配置

     

4 将配置的dataSource 添加到sessionFactory 中

5 将sessionFactory 注入到sqlSession中

6 动态切换数据源决定采用spring-aop 添加切点 去进行动态切换

6.1 新建数据切换类

public class DataBaseAop {

public void before(InputObject inputObject,OutputObject outputObject) {  if(条件){

MultiDataSource.setDataSourceKey("dataSource1");

}else{
MultiDataSource.setDataSourceKey("dataSource2");
}

}

}

6.2 定义数据切换类

6.3定义切点

proxy-target-class="true" 参数是为了设置 拦截 器可以定义为class

注释

1 AbstractRoutingDataSource 类中 存在跟数据库资源建立连接的方法
public Connection getConnection()

在该方法中 调用了 protected DataSource determineTargetDataSource() 方法

在该方法中 会调用 determineCurrentLookupKey 获取dataBase 的key 并根据 key 从对应的数据源中获取对应的数据库连接资源 如数据库连接池资源

类 MultiDataSource 重写了 determineCurrentLookupKey 方法

@Overrideprotected Object determineCurrentLookupKey() {    return dataSourceKey.get();}

在需要切换数据源之前 调用全局方法 MultiDataSource.setDataSourceKey(String key) 去切换数据源

2

     

配置中的 标签中的 key 为动态切换数据源的key
defaultTargetDataSource 参数 指的是默认的数据源

转载地址:http://mkrso.baihongyu.com/

你可能感兴趣的文章
【★】独创多播超级教程!
查看>>
Scala之美 - Future & map & flatMap
查看>>
Java获取随机数生成随机字符串用于验证码等之类的工具
查看>>
简单的下单程序
查看>>
Golang面试题解析(三)
查看>>
前端与后台之间的乱码问题
查看>>
关于GitHub迁移到K8S的最佳实践,你最看重哪方面?
查看>>
openstack核心路由和扩展路由及路由对应的api函数调用流程分析
查看>>
java操作mongodb数据库
查看>>
自己动手写一个查询cet成绩的API
查看>>
http:与https:到底有哪些区别?
查看>>
细节决定成败----Android应用程序的优化(一)
查看>>
mac 下 gem安装 compass 遇到 '-multiply_defineds'
查看>>
怎样在MyEclipse中恢复误删的java文件方法
查看>>
redis-spring
查看>>
索引优缺点
查看>>
golang 组合class 输出
查看>>
【ZZ】python with...as...用法
查看>>
精美的国外扁平化网页设计作品
查看>>
Java中断机制
查看>>