Spring-Mybatis多数据源配置
使用的spring的数据源代理,org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.AbstractRoutingDataSource
具体实现代码如下
/**
* spring中的动态数据源切换
* @author zhuowen_pan
*/
public class ThreadLocalRoutingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDBHolder();
}
}
public class DataSourceContextHolder {
public static final String CURRENT_KEY_DB = "db1";
public static final String STORE_KEY_DB = "db2";
public static final String ARCHIVE_KEY_DB = "db3";
private static final ThreadLocal<String> DB_HOLDER = new ThreadLocal<>();
public static void setDBHolder(String dbHolder) {
DB_HOLDER.set(dbHolder);
}
static String getDBHolder() {
return DB_HOLDER.get();
}
public static void cleanDBHolder() {
DB_HOLDER.remove();
}
public static void resetDBHolder() {
DB_HOLDER.remove();
DB_HOLDER.set(CURRENT_KEY_DB);
}
}
<bean id="dyDataSource" class="cn.com.jit.cloud.km.common.dal.datasource.ThreadLocalRoutingDataSource"
primary="true">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSource00" key="db1"/>
<entry value-ref="dataSource01" key="db2"/>
<entry value-ref="dataSource02" key="db3"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource00"/>
</bean>
dataSource00,dataSource01,dataSource02对应三个数据源,在代码中用根据key来手动切换数据源