有时候我们想要实现动态选择数据源的功能,即在进行数据库操作时选择对具体的某个数据源进行操作。这个功能我们利用Spring+Mybatis 即可实现。
1.DataSourceSwitcher
Spring 提供了一个 AbstractRoutingDataSource 抽象类来帮助我们实现动态数据源功能,我们可以自定义一个类 DataSourceSwitcher 并继承 AbstractRoutingDataSource ,在 DataSourceSwitcher 类中实现三个方法 clearDataSource、determineCurrentLookupKey 和 setDataSourceKey 就行。
public class DataSourceSwitcher extends AbstractRoutingDataSource {
//因为线程经常切换,所以将线程所分配的数据源存入 ThreadLocal中
private static final ThreadLocal<String> dataSourceKey=new ThreadLocal<>();
/**
* 清除 ThreadLocal 存储的数据源
*/
public static void clearDataSource(){
dataSourceKey.remove();
}
/**
* 决定使用哪个数据库
* @return
*/
@Override
protected Object determineCurrentLookupKey() {
String dataSource=dataSourceKey.get();
return dataSource;
}
/**
* 设置数据源
* @param dataSource
*/
public static void setDataSourceKey(String dataSource){
dataSourceKey.set(dataSource);
}
}
2.配置 spring-mybatis.xml
<!-- 引入配置文件-->
<context:property-placeholder location="classpath:druid.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${druid.username}" />
<property name="password" value=