SSM多数据源配置

到新的公司,公司有配置多数据源的需求,就自己学了


首先:

思路真的很重要,如果大家看过别的小伙伴写的博客之后,大概都有那么一点思路了,下面我说说我的思路

其实多数据源的配置,就是四步

一、配置和原来一个一样的数据源,

二、数据源的管理,

三、sqlSessionFactory用相应的数据源

四、程序里面怎么决定我这支交易到底要调那个数据源


下面我们来看看我的第一步:










        >  
       


 
   

第二步:数据源的管理

 
         
             
           
                 
               
                 
           
 
       
 
         
         
       
 
   
 

第三步:sqlSessionFactory调用数据源数据


     
   
         
       
         
     

第四步:程序里面调用相应的数据源

大家 注意,我在第二步的class里面有一个com.core.DynamicDataSource 我最开始的时候以为是导的某个架包里面的类,后来发现不是的,原来是需要自己写的一个类

DynamicDataSource    继承了AbstractRoutingDataSource 类

其实DynamicDataSource    的功能 就只是获取到具体的数据源,而AbstractRoutingDataSource 主要的功能就是设置和获取数据源



package com.core;


import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;


public class DynamicDataSource extends AbstractRoutingDataSource {


@Override
protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
return DatabaseContextHolder.getDataSource();  
}

}


package com.core;


public class DatabaseContextHolder {
/**
 * 注意:数据源标识保存在线程变量中,避免多线程操作数据源时互相干扰
*/
     private static final ThreadLocal THREAD_DATA_SOURCE = new ThreadLocal();
 
     public static String getDataSource() {
         return THREAD_DATA_SOURCE.get();
    }

    public static void setDataSource(String dataSource) {
        THREAD_DATA_SOURCE.set(dataSource);
    }

    public static void clearDataSource() {
        THREAD_DATA_SOURCE.remove();
}
}



真正设置和调用数据源


@Override
public List queryCity() {
System.out.println("queryCity");
DatabaseContextHolder holder = new DatabaseContextHolder();
holder.setDataSource("dataSourceTwo");//设置第二个数据源,这里如果不设置它就调用默认的数据源
return cityDao.queryCity();
}

下图为图解:

SSM多数据源配置_第1张图片


你可能感兴趣的:(SSM多数据源配置)