1.在spring配置文件中配置

<!--第一个数据源-->
    <!-- 配置c3p0 数据源 -->
    <bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!-- 配置事务管理器 -->
    <bean id="txManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 这里可以指定默认的数据源 -->
        <property name="dataSource" ref="dataSource1"></property>
    </bean>

    <!--第2个数据源-->
     <!--配置c3p0 数据源2 -->
    <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc2.driver}"></property>
        <property name="jdbcUrl" value="${jdbc2.url}"></property>
        <property name="user" value="${jdbc2.username}"></property>
        <property name="password" value="${jdbc2.password}"></property>
    </bean>
    <!-- 配置事务管理器 -->
    <bean id="txManager2"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 这里可以指定默认的数据源 -->
        <property name="dataSource" ref="dataSource2"></property>
    </bean>

    <!-- 下面的是切换数据库的自定义类,配置文件的配置多数源映射关系 -->
    <bean id="multipleDataSource" class="com.pdzx.util.DynamicDataSource">
        <property name="defaultTargetDataSource" ref="dataSource1"></property>
        <property name="targetDataSources">
            <map>
                <entry key="dataSource1" value-ref="dataSource1"></entry>
                <entry key="dataSource2" value-ref="dataSource2"></entry>
            </map>
        </property>
    </bean>

2.继承AbstractRoutingDataSource

public class DBContextHolder {

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

}

 

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DBContextHolder.getDbType();
    }
}

3.切换数据库

//指定数据库
DBContextHolder.setDbType("dataSource1");

 

posted on 2020-07-13 20:42  路仁甲  阅读(322)  评论(0编辑  收藏  举报