需求:
有些时候,我们需要连接多个数据库,但是,在方法调用前并不知道到底是调用哪个。即同时保持多个数据库的连接,在方法中根据传入的参数来确定。
下图的单数据源的调用和多数据源动态调用的流程,可以看出在Dao层中需要有一个DataSource选择器,来确定到底是调用哪个数据源。
实现方式
对Dao层提供一个公共父类,保持有多个数据源的连接(本人是基于iBatis,即保持多个SQLSessionTemplate)
/**
* Created by hzlizhou on 2017/2/6.
*/
public abstract class MultiDatasourceDao implements IDaoSupport {
private Map sqlSessionTemplateMap;
private MultiDataSourceSelector multiDataSourceSelector;
public MultiDatasourceDao(Map sqlSessionTemplateMap, MultiDataSourceSelector multiDataSourceSelector) {
this.sqlSessionTemplateMap = sqlSessionTemplateMap;
this.multiDataSourceSelector = multiDataS