<bean id="dataSourceMybatis" class="com.tuniu.mcs.product.db.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="master" value-ref="MCS_PMS-PRD_NM-MASTER-DB" />
<entry key="slave" value-ref="MCS_PMS-PRD_NM-SLAVE-DB" />
</map>
</property>
<property name="defaultTargetDataSource" ref="MCS_PMS-PRD_NM-MASTER-DB"></property>
</bean>
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource
{
@Override
protected Object determineCurrentLookupKey()
{
return DataSourceSwitch.getDataSouce();
}
}
import org.springframework.util.Assert;
public class DataSourceSwitch
{
@SuppressWarnings("rawtypes")
private static final ThreadLocal CONTEXTHOLDER = new ThreadLocal();
/**
* @param dataSource
*/
@SuppressWarnings("unchecked")
public static void setDataSource(String dataSource)
{
Assert.notNull(dataSource, "数据源未创建成功!");
CONTEXTHOLDER.set(dataSource);
}
/**
* set master dataSource
*/
@SuppressWarnings("unchecked")
public static void setMaster()
{
CONTEXTHOLDER.remove();
CONTEXTHOLDER.set("master");
}
/**
* set slave dataSource
*/
@SuppressWarnings("unchecked")
public static void setSlave()
{
CONTEXTHOLDER.remove();
CONTEXTHOLDER.set("slave");
}
/**
* @return dataSource
*/
@SuppressWarnings("unchecked")
public static String getDataSouce()
{
if (null == CONTEXTHOLDER.get())
{
CONTEXTHOLDER.set("master");
}
return CONTEXTHOLDER.get().toString();
}
}
在代码中调用DataSourceSwitch.setSlave();