码迷,mamicode.com
首页 > 其他好文 > 详细

SSH配置动态数据源

时间:2014-09-22 00:38:21      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   io   os   java   ar   数据   

用到一个项目,需要整合2个不同的数据库!

现将代码贴下,以备后用:

1、创建静态映射类,该类映射动态数据源

public class DataSourceMap {  
     public static final String Analyse="Analyse";      
     public static final String DLmarket= "DLmarket";    
} 

2、创建数据库连接配置容器类

public class DataSourceContextHolder {  
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  
      
    public static void setCustomerType(String customerType){  
        contextHolder.set(customerType);  
    }  
      
    public static String getCustomerType() {  
        return contextHolder.get();  
    }  
  
    public static void clearCustomerType() {  
        contextHolder.remove();  
    }  
  
}  

3、创建动态数据源切换类

public class DynamicDataSource extends AbstractRoutingDataSource{  
  
    @Override  
    protected Object determineCurrentLookupKey() {  
        // TODO Auto-generated method stub  
        String customerType="";  
        if(DataSourceContextHolder.getCustomerType()!=null){  
            customerType = DataSourceContextHolder.getCustomerType().toString();  
        }  
        return customerType;  
    }  
      
}  

该类继承AbstractRoutingDataSource,并重写determineCurrentLookupKey方法

4、在spring中配置多数据源

<bean id="analyseDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
<property name="url" value="${jdbc_url}" />  
<property name="username" value="${jdbc_username}" />  
<property name="password" value="${jdbc_password}" />  
xxx...  
</bean>  
  
<bean id="dlmarketDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
<property name="url" value="${jdbc_url_dlmarket}" />  
<property name="username" value="${jdbc_username_dlmarket}" />  
<property name="password" value="${jdbc_password_dlmarket}" />  
xxx...  
<bean>  
  
<!-- 多数据源的映射关系 -->  
<bean id="dataSource" class="com.current.util.DynamicDataSource">  
    <property name="targetDataSources">  
    <map key-type="java.lang.String">  
    <!-- key的值必须要和静态键值对照类中的值相同&nbsp; -->  
        <entry value-ref="analyseDataSource" key="Analyse"></entry>  
        <entry value-ref="dlmarketDataSource" key="DLmarket"></entry>  
    </map>  
    </property>  
    <property name="defaultTargetDataSource" ref="analyseDataSource"></property>  
</bean>  

其他的SessionFactory   事务管理器配置都不需要修改。

5、在Action中切换数据源

public void getList(){  
        DataSourceContextHolder.setCustomerType(DataSourceMap.DLmarket);  
        int id=1;  
        List<Chaining> chainList = chainService.getList(id);  
        System.out.println(chainList.get(0).getChaining());   
    } 

SSH配置动态数据源

标签:des   style   blog   color   io   os   java   ar   数据   

原文地址:http://www.cnblogs.com/dreammyle/p/3985206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!