首页 > 代码库 > SSH配置动态数据源

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());       } 

SSH配置动态数据源