天天看点

spring+myBatis 配置多数据源,切换数据源

      一个项目里一般情况下只会使用到一个数据库,但有的需求是要显示其他数据库的内容,像这样,我认为有两种做法

1、在使用另一个数据库的项目里写一些restful接口,满足移动端PC端的同时也满足其他应用调用数据的需求;

2、就是在项目里配置多数据源;

       我现在就是要使用另一个数据库的数据,想到了以上两种方法,为了更加熟悉spring,我打算使用第二种方案;我在百度上查了好多关于spring配置多数据源的blog,最后综合一些,总结一下,用最简洁,最直观的方法来实现这个功能.

首先,单数据源配置流程如下

spring+myBatis 配置多数据源,切换数据源

一个数据库对应一个dataSource,然后对应sqlSession,然后再在Dao层实现,配置如下

但数据源就是这样的配置,数据库连接和一些属性的配置--->sqlSession配置--->映射文件哦欸之--->事物管理

如果是多数据源,有下面两种方案

spring+myBatis 配置多数据源,切换数据源

A和B,先看看B,分别为两个数据源配置两个sqlSession,然后再Dao层实现,虽然功能实现了,但是到后期如果在增加多个数据源的话,修改复杂,维护起来也相当的麻烦,也不符合开闭原则;

A同样配置了两个dataSource,然后实现一个DynamicDataSource类,使用一个sqlSession,这样维护起来也非常的容易,我是用的就是A,配置起来相当简单!

毋庸置疑,两个dataSouce

然后配置自己实现的com.iquant.signal.configer.DynamicDataSource类,需指定默认的数据源,如使用其他再进行切换

sqlSession和事物和之前一样,不用改动,实现DynamicDataSource类

继承AbstractRoutingDataSource 重写determineCurrentLookupKey方法

实现DataSourceContextHolder类

到此,多数据源就配置完成,如果想切换数据源,在代码操作对应数据库之前,加上此句代码

这样就完成了多数据源的配置和切换功能,以后还有数据库添加,在配置一个dataSouce3.4.5.6.等等,就行了

为人:谦逊、激情、博学、审问、慎思、明辨、 笃行

学问:纸上得来终觉浅,绝知此事要躬行

为事:工欲善其事,必先利其器。

转载请标注出处!