SSM框架用到不同数据库时,如何切换数据源。

SSM有时会用到不同数据库,涉及到切换数据源的问题 。

 

步骤:

1.首先在spring-mybatis文件中配置两个dataSource

    <!-- 配置第一个数据库 -->
    <bean id="dataSource2"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${username}"></property>
        <property name="password" value="${password}"></property>
        <!-- <property name="initialSize" value="${initialSize}"></property>
        <property name="maxActive" value="${maxActive}"></property>
        <property name="maxIdle" value="${maxIdle}"></property>
        <property name="minIdle" value="${minIdle}"></property> -->
    </bean>
    <!-- 配置第二个数据库 -->
    <bean id="dataSource1"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver2}"></property>
        <property name="url" value="${url2}"></property>
        <property name="username" value="${username2}"></property>
        <property name="password" value="${password2}"></property>
    </bean>

2.两个配置类

package util;

/**

 * @author 崔哲

 * @description 数据源切换

 */

public class DBContentHolder {

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

    }

}

package util;

/**

 * @author 崔哲

 * @description 数据源切换

 */

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override

    protected Object determineCurrentLookupKey() {

        

        return DBContentHolder.getDbType();

    }

    

    public void getUserById(Integer id) {

        

            if(id == 1){

             //调用数据库1

                DBContentHolder.setDbType("dataSource1");

            }else{

             //调用数据库2

                DBContentHolder.setDbType("dataSource2");

            }

        }

       

}

3.在用到的地方  DBContentHolder.setDbType("dataSource1"); 

          或者 DBContentHolder.setDbType("dataSource2");

猜你喜欢

转载自blog.csdn.net/zZoOoOJaVa/article/details/88415510
今日推荐