zoukankan      html  css  js  c++  java
  • SSH配置动态数据源

    用到一个项目,需要整合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());   
        } 
  • 相关阅读:
    设计模式与23种设计模式的简单介绍
    一文读懂C++ Vector在算法竞赛中的常见用法
    一文读懂C++ String类在算法竞赛中的常见用法
    GO语言的单元测试与性能测试
    变量提升和函数提升及二者优先级
    闭包
    读《你不知道的JavaScript 中》-异步【3】Promise
    js数组方法-改变原数组和不改变原数组
    读《你不知道的JavaScript 中》-异步【2】回调
    组合类算法问题
  • 原文地址:https://www.cnblogs.com/dreammyle/p/3985206.html
Copyright © 2011-2022 走看看