vanishma
12/8/2015 - 2:28 AM

Spring+MyBatis多数据源配置实现

Spring+MyBatis多数据源配置实现

public class MultipleDataSource  extends AbstractRoutingDataSource {
    private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();

    public static void setDataSourceKey(String dataSource) {
        dataSourceKey.set(dataSource);
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return dataSourceKey.get();
    }
    public void  setDataSourcedefault (){
        MultipleDataSource.setDataSourceKey("sqlDataSource");
    }

    public void setDataSource(){
        MultipleDataSource.setDataSourceKey("myDataSource");
    }
}

 
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.16.139:3306/szx
username=***
password=***

mydriver=com.mysql.jdbc.Driver
myurl=jdbc:mysql://192.168.16.139:3306/szxnw
myusername=***
mypassword=***

#定义初始连接数  
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲 
maxIdle=20
#定义最小空闲  
minIdle=1
#定义最长等待时间  
maxWait=60000
<bean id="sqlDataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${mydriver}" />
        <property name="url" value="${myurl}" />
        <property name="username" value="${myusername}" />
        <property name="password" value="${mypassword}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>
    <bean id="multipleDataSource" class="com.sc.common.MultipleDataSource">
        <property name="defaultTargetDataSource" ref="sqlDataSource"/>
        <property name="targetDataSources">
            <map>
                <entry key="dataSource" value-ref="sqlDataSource"/>
                <entry key="myDataSource" value-ref="myDataSource"/>
            </map>
        </property>
    </bean>