ssm多數據源配置

今天配置了下ssm多數據源:java

 1.首先定義數據庫spring

在這裏定義了三個類,sql

 

 

 

public class DataSourceType {

    public static final String ONE = "datasource_one";
    public static final String TWO = "datasource_two";


}
public class DataSourceContextHolder {
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    public static void setDbType(String dbType) {
        contextHolder.set(dbType);
    }

    public static String getDbType() {
        return ((String) contextHolder.get());
    }

    public static void clearDbType() {
        contextHolder.remove();
    }
}
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import java.util.logging.Logger;

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    public Logger getParentLogger() {
        return null;
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDbType();
    }

}

這裏主要是用來切換數據源的.數據庫

這是兩個數據庫的表使用MybatisGeneratorXml逆向工程生產的.mybatis

 

 

 

配置數據源app

 

 

 配置sqlSessionFactoryide

 

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--<context:property-placeholder location="classpath:jdbc.properties"/>-->


    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean>


    <!-- 配置數據源,數據庫鏈接池 -->
    <bean id="datasource_one" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <!--數據庫驅動-->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <!--數據庫連接地址-->
        <property name="url" value="${jdbc.url.one}"/>
        <!--數據庫用戶名-->
        <property name="username" value="${jdbc.username}"/>
        <!--數據庫鏈接密碼-->
        <property name="password" value="${jdbc.password}"/>
        <!--鏈接池初始化大小-->
        <property name="initialSize" value="${jdbc.initialSize}"/>
        <!--鏈接池最小數量-->
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <!--鏈接池最大數量-->
        <property name="maxActive" value="${jdbc.maxActive}"/>
        <!--鏈接池等待超時時間-->
        <property name="maxWait" value="${jdbc.maxWait}"/>
        <!--配置間隔多久才進行一次檢測,檢測須要關閉空閒鏈接,單位是毫秒-->
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
        <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
        <property name="validationQuery" value="${jdbc.validationQuery}"/>
        <property name="testOnReturn" value="${jdbc.testOnReturn}"/>
        <!--打開PSCache,而且制定每一個鏈接上PSCache的大小-->
        <property name="poolPreparedStatements" value="${jdbc.poolPreparedStatements}"/>
        <property name="maxPoolPreparedStatementPerConnectionSize"
                  value="${jdbc.maxPoolPreparedStatementPerConnectionSize}"/>
        <!--配置監控統計攔截的filters-->
        <property name="filters" value="${jdbc.filters}"/>
    </bean>

    <bean id="datasource_two" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <!--數據庫驅動-->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <!--數據庫連接地址-->
        <property name="url" value="${jdbc.url.two}"/>
        <!--數據庫用戶名-->
        <property name="username" value="${jdbc.username}"/>
        <!--數據庫鏈接密碼-->
        <property name="password" value="${jdbc.password}"/>
        <!--鏈接池初始化大小-->
        <property name="initialSize" value="${jdbc.initialSize}"/>
        <!--鏈接池最小數量-->
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <!--鏈接池最大數量-->
        <property name="maxActive" value="${jdbc.maxActive}"/>
        <!--鏈接池等待超時時間-->
        <property name="maxWait" value="${jdbc.maxWait}"/>
        <!--配置間隔多久才進行一次檢測,檢測須要關閉空閒鏈接,單位是毫秒-->
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
        <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
        <property name="validationQuery" value="${jdbc.validationQuery}"/>
        <property name="testOnReturn" value="${jdbc.testOnReturn}"/>
        <!--打開PSCache,而且制定每一個鏈接上PSCache的大小-->
        <property name="poolPreparedStatements" value="${jdbc.poolPreparedStatements}"/>
        <property name="maxPoolPreparedStatementPerConnectionSize"
                  value="${jdbc.maxPoolPreparedStatementPerConnectionSize}"/>
        <!--配置監控統計攔截的filters-->
        <property name="filters" value="${jdbc.filters}"/>
    </bean>



    <!-- 動態配置數據源 -->
    <bean id="dataSource" class="club.iyousi.datasource.DynamicDataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry value-ref="datasource_one" key="datasource_one"></entry>
                <entry value-ref="datasource_two" key="datasource_two"></entry>
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="datasource_one"></property>      <!-- 默認使用ds1的數據源 -->
    </bean>


    <!-- 配置sqlSessionFactory交由spring進行管理 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 設置數據源引用 -->
        <property name="dataSource" ref="dataSource"></property>
        <!--配置mapping文件-->
        <property name="mapperLocations" >
            <list>
                <value>classpath*:club/iyousi/one/mapping/*.xml</value>
                <value>classpath*:club/iyousi/two/mapping/*.xml</value>
            </list>
        </property>
        <!-- 加載mybatis的全局配置文件路徑 -->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>

    </bean>

    <!-- 配置mapper接口掃描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 要掃描的包的名稱,有多個包時,包名之間用半角逗號隔開 -->
        <property name="basePackage" value="club.iyousi.one.dao,club.iyousi.two.dao"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>


</beans>
相關文章
相關標籤/搜索