工具类:
/**
*
*/
package com.myhope.util;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* Description:<br/>
* Copyright (c) , 2017, Jansonxu <br/>
* This program is protected by copyright laws. <br/>
* Program Name:DynamicDataSource<br/>
* Date:2019年2月13日
*
* @author
* @version : 1.0
*/
public class DbcontextHolder extends AbstractRoutingDataSource{
public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
/**
* 设置当前数据源
* @param dbType
*/
public static void setDbType(String dbType){
contextHolder.set(dbType);
}
/**
* 获得当前数据源
* @return
*/
public static String getDbType(){
String dbType = (String)contextHolder.get();
return dbType;
}
/**
*清除上下文
*
*/
public void clearContext(){
contextHolder.remove();
}
@Override
protected Object determineCurrentLookupKey() {
return DbcontextHolder.getDbType();
}
}
applicationContext.xml配置文件
<!-- 连接池:C3P0, DBCP等等 -->
<!-- 配置第一个数据库-->
<bean id="dataSource_first" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}"></property>
<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
<property name="minPoolSize" value="${jdbc.minPoolSize}" />
<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
</bean>
<!-- 配置第二个数据库-->
<bean id="dateSource_second" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl2}" />
<property name="driverClass" value="${jdbc.driverClass2}"></property>
<property name="user" value="${jdbc.user2}" />
<property name="password" value="${jdbc.password2}"></property>
<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
<property name="minPoolSize" value="${jdbc.minPoolSize}" />
<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
</bean>
<bean id="dataSource" class="com.myhope.util.DbcontextHolder">
<property name="targetDataSources">
<map key-type="java.lang.String">
<!-- 指定lookupKey和与之对应的数据源,这里的key可以自行定义,要切换数据库的时候以key为标识,不要写错 -->
<entry key="dataSource_first" value-ref="dataSource_first"></entry>
<entry key="dateSource_second" value-ref="dateSource_second"></entry>
</map>
</property>
<!-- 这里可以指定默认的数据源 -->
<property name="defaultTargetDataSource" ref="dataSource_first" />
</bean>
biz层切换数据库
DbcontextHolder.setDbType("dataSource_first");
DbcontextHolder.setDbType("dateSource_second");