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