SpringMVC配置双数据源

1.在XML中配置对应的bean

<!--数据源dataSourceLocal-->
<bean id="dataSourceLocal" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.className}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
</bean>
<!--数据源dataSource137-->
<bean id="dataSource137" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.localDataBase.className}" />
    <property name="url" value="${jdbc.localDataBase.url}" />
    <property name="username" value="${jdbc.localDataBase.username}" />
    <property name="password" value="${jdbc.localDataBase.password}" />
</bean>
<!--将数据源引入的dataSource-->
<bean id="dataSource" class="com.simple.common.dataconfig.DynamicDataSource">
    <!--将两个数据源引入到Map<dataSourceName,dataSource>-->
    <property name="targetDataSources">
        <map key-type="java.lang.String">
            <entry value-ref="dataSourceLocal" key="dataSourceLocal"></entry>
            <entry value-ref="dataSource137" key="dataSource137"></entry>
        </map>
    </property>
    <!--指定默认使用的数据源-->
    <property name="defaultTargetDataSource" ref="dataSourceLocal">
    </property>
</bean>

2.自己实现DynamicDataSource这个bean

package com.simple.common.dataconfig;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
//需要继承AbstractRoutingDataSource,通过determineCurrentLookupKey方法设置当前数据源
public class DynamicDataSource extends AbstractRoutingDataSource {

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

}

3.封装数据源

package com.simple.common.dataconfig;

public class DataSourceContextHolder { 


    private static final ThreadLocal<String> contextHolder = 
           new ThreadLocal<String>();      

    //设置使用的数据源,dbType为bean的名字(xml中配置了dataSourceLocal,dataSource137)
    public static void setDBType(String dbType) {      
        contextHolder.set(dbType); 
    }      

    //获取当前使用的数据源
    public static String getDBType() {      
        return ((String) contextHolder.get());      
    }      

    //使用默认数据源
    public static void clearDBType() {      
        contextHolder.remove();      
    }      
} 

4.实际调用用的类

package com.simple.common.dataconfig;

//设置使用的数据源,获取使用的数据源
public class DataSourceGetSet {

    // Oracle数据库
    private static final String WEBADMORACLE = "dataSource137";

    // 本地数据源--MYSQL数据库
    private static final String LOCALMYSQL = "dataSourceLocal";

    /**
     * 使用137环境数据源
     * @return 配置成功返回true
     */
    public static boolean SetDataSourceTO137() {
        DataSourceContextHolder.setDBType(WEBADMORACLE);
        String DBType = DataSourceContextHolder.getDBType();
        if (WEBADMORACLE.equals(DBType)) {
            return true;
        }
        return false;
    }

    /**
     * 使用本地环境数据源
     * @return 配置成功返回true
     */
    public static boolean SetDataSourceTOLocal() {
        DataSourceContextHolder.setDBType(LOCALMYSQL);
        String DBType = DataSourceContextHolder.getDBType();
        if (LOCALMYSQL.equals(DBType)) {
            return true;
        }
        return false;
    }

    /**
     * 获取当前数据源名称
     */
    public static String GetDBType(){
        return DataSourceContextHolder.getDBType();
    }
}

如果需要配置更多数据源,同理可知!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值