主要是利用了spring的AbstractRoutingDataSource。
直接上配置了:
- spring-mybatis.xml
MultipleDataSource.java
public class MultipleDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { // TODO Auto-generated method stub return DataSourceTypeManager.get(); }}
DataSourceTypeManager.java(为了避免多个线程间造成并发问题,用了线程本地变量)
public class DataSourceTypeManager { // public static final String DS_BIO = "dataSource"; // public static final String DS_MODEL = "dataSource2"; // public static final String DS_ORACLE_RD = "dataSource3"; private static final ThreadLocaldataSourceKey = new ThreadLocal (){ /* @Override protected String initialValue(){ return DS_SUNGBIO; }*/ }; public static void setDataSourceKey(String dataSource) { dataSourceKey.set(dataSource); } public static String get(){ return dataSourceKey.get(); } public static void set(String dataSourceType){ dataSourceKey.set(dataSourceType); } public static void reset(){ dataSourceKey.set(DS_BIO); } public static void cleanDataSource(){ dataSourceKey.remove(); }}
使用方法:
使用前,手动写:
DataSourceTypeManager.setDataSourceKey(DataSourceTypeManager.DS_MODEL);
嫌麻烦的话,也可以像如下参考文章,配置注解,然后增加aop:
http://www.cnblogs.com/davidwang456/p/4318303.html