- 数据源配置
<bean id="dynamicDataSource" class="com.want.search.util.DbContextHolder" >
<property name="targetDataSources">
<map key-type="java.lang.String">
<!--通过不同的key决定用哪个dataSource-->
<entry value-ref="dataSource1" key="dataSource1"></entry>
<entry value-ref="dataSource2" key="dataSource2"></entry>
</map>
</property>
<!--设置默认的dataSource-->
<property name="defaultTargetDataSource" ref="dataSource1"></property>
</bean>
2.实现类
package com.want.search.util;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DbContextHolder extends AbstractRoutingDataSource{
public static final String DATA_SOURCE_DEFA = "dataSource1";
public static final String DATA_SOURCE_FLOW = "dataSource2";
private 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 str = (String) contextHolder.get();
return str;
}
/**
* 清除上下文数据
*/
public static void clearDbType()
{
contextHolder.remove();
}
@Override
protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
return DbContextHolder.getDbType();
}
}
3.将数据源注入到sqlsessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations" value="classpath:mybatis/*Mapper.xml" />
<property name="dataSource" ref="dynamicDataSource" />
<property name="typeAliasesPackage" value="com.want.search.vo" />
</bean>
4.具体调用方法(只能在controller层才能实现数据源切换)
DbContextHolder.setDbType(DbContextHolder.DATA_SOURCE_FLOW);