SSM框架配置多数据源

一、自动切换数据源

         数据源类型常量类(也可以是枚举类),具体代码如下:

/**
 * 数据源名称
 *
 * @author hrc
 * @date 2018年10月9日
 */
public class DataSourceDialect {
   public static final String ORACLE="oracle";
   public static final String MYSQL="mysql"; 
}


       数据源切换类,构建一个数据源类型容器,并提供了向其中设置、获取和清空数据源类型的方法,具体代码如下:

/**
 * 数据源类型容器
 *
 * @author hrc
 * @date 2018年10月9日
 */
public class DataSourceSwitch {

   /**
    * 保存数据源类型线程安全容器
    */
   private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

   /**
    * 设置数据源类型
    * @param dataSourceType  数据源类型
    */
   public static void setDataSourceType (String dataSourceType) {
      contextHolder.set(dataSourceType);
   }

   /**
    * 获取数据源类型
    * @return
    */
   public static String getDataSourceType(){ 
        return (String) contextHolder.get(); 
    } 

   /**
    * 清空数据源类型
    */
    public static void clearDataSourceType(){ 
        contextHolder.remove(); 
    } 

}

 
动态切换数据源类,该类需要继承AbstractRoutingDataSource类,并重写determineCurrentLookupKey()方法,从数据源类型容器中获取当前线程的数据源类型。相关代码如下:
public class DynamicDataSource extends AbstractRoutingDataSource{ 
  
    @Override 
    protected Object determineCurrentLookupKey() { 
        return DataSourceSwitch.getDataSourceType(); 
    } 

}

二、数据源信息配置文件修改

jdbc.properties

jdbc.mysql.diverClassName=com.mysql.jdbc.Driver
#测试机
jdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/zldcpt?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
jdbc.mysql.username=root
jdbc.mysql.password=123456


jdbc.oracle.diverClassName=oracle.jdbc.driver.OracleDriver
#测试机
jdbc.oracle.url=jdbc:oracle:thin:@//127.0.0.1:1521/SAP
jdbc.oracle.username=ZLDC
jdbc.oracle.password=zldc


jdbc.initialSize=5
jdbc.maxActive=20
jdbc.maxIdle=20
jdbc.minIdle=1
jdbc.maxWait=60000

 

 

三、Spring-Mybatis配置文件修改

spring-mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans 

        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 

        http://www.springframework.org/schema/tx 

        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 

        http://www.springframework.org/schema/aop 

        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 

        http://www.springframework.org/schema/context 

        http://www.springframework.org/schema/context/spring-context-4.3.xsd 

        http://www.springframework.org/schema/mvc 

        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

       

    <!--1 加载数据资源属性文件 -->

    <bean id="propertyConfigurer"

       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

       <property name="location" value="classpath:jdbc.properties" />

    </bean>

   

    <!-- 配置数据源 dbcp -->

    <bean id="oracleDataSource" class="com.alibaba.druid.pool.DruidDataSource"

       destroy-method="close">

       <property name="driverClassName" value="${jdbc.oracle.diverClassName}" />

       <property name="url" value="${jdbc.oracle.url}" />

       <property name="username" value="${jdbc.oracle.username}" />

       <property name="password" value="${jdbc.oracle.password}" />

       <!-- 初始化连接大小 -->

       <property name="initialSize" value="${jdbc.initialSize}" />

       <!-- 连接池最大数量 -->

       <property name="maxActive" value="${jdbc.maxActive}" />

       <!-- 连接池最大空闲 -->

       <!-- <property name="maxIdle" value="${maxIdle}" /> -->

       <!-- 连接池最小空闲 -->

       <property name="minIdle" value="${jdbc.minIdle}" />

       <!-- 获取连接最大等待时间 -->

       <property name="maxWait" value="${jdbc.maxWait}" />

    </bean>[A1] 

    <!-- 配置数据源 dbcp -->

    <bean id="mysqlDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">

       <property name="driverClassName" value="${jdbc.mysql.diverClassName}" />

       <property name="url" value="${jdbc.mysql.url}" />

       <property name="username" value="${jdbc.mysql.username}" />

       <property name="password" value="${jdbc.mysql.password}" />

       <!-- 初始化连接大小 -->

       <property name="initialSize" value="${jdbc.initialSize}" />

       <!-- 连接池最大数量 -->

       <property name="maxActive" value="${jdbc.maxActive}" />

       <!-- 连接池最大空闲 -->

       <!-- <property name="maxIdle" value="${maxIdle}" /> -->

       <!-- 连接池最小空闲 -->

       <property name="minIdle" value="${jdbc.minIdle}" />

       <!-- 获取连接最大等待时间 -->

       <property name="maxWait" value="${jdbc.maxWait}" />

    <!--   <property name="validationQuery" value="select 1 from dual" /> -->

       <property name="testOnBorrow" value="true"/>

    </bean>[A2] 

    <bean id="dataSource" class="com.zldc.common.datasource. DynamicDataSource">

       <property name="targetDataSources">

           <map key-type="java.lang.String">

              <entry key="ORACLE" value-ref="oracleDataSource"></entry>

              <entry key="MYSQL" value-ref="mysqlDataSource"></entry>

           </map>

       </property>

       <!-- 这里可以指定默认的数据源 -->

        <property name="defaultTargetDataSource" ref="oracleDataSource" /> 

    </bean>[A3] 

   

    <!-- 3 配置sessionfactory -->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

       <property name="dataSource" ref="dataSource" />

       <!-- 加载mybatis的全局配置文件 -->

        <property name="configLocation" value="classpath:mybatis.xml" />

       <!-- 自动扫描mapping.xml文件 -->

       <property name="mapperLocations" value="classpath:com/zldc/*/mapper/*.xml," />

    </bean>

    <!-- 4 装配dao接口 -->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

       <property name="basePackage" value="com.zldc.**.mapper" /> <!-- DAO接口所在包名,Spring会自动查找其下的类 -->

       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>

    </bean>

    <!-- 5、声明式事务管理 -->

    <bean id="transactionManager"

       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource" ref="dataSource" />

    </bean>

    <!-- 6、注解事务切面 -->

    <tx:annotation-driven transaction-manager="transactionManager" />

</beans>

 [A1]配置数据源一信息:oracle

 [A2]配置数据源二信息:MySQL

 [A3]使用动态数据源类创建数据源

四、数据源切换代码

try {
    DataSourceSwitch.setDataSourceType(DataSourceDialect.MYSQL);

    /*
     * 代码
     */
   
} finally {
    DataSourceSwitch.clearDataSourceType();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章