1.继承AbstractRoutingDataSource。重写数据源切换方法
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 从自定义的位置获取数据源标识
return DynamicDataSourceHolder.getDataSource();
}
}
public class DynamicDataSourceHolder {
/**
* 注意:数据源标识保存在线程变量中,避免多线程操作数据源时互相干扰
*/
private static final ThreadLocal THREAD_DATA_SOURCE = new ThreadLocal();
public static String getDataSource() {
return THREAD_DATA_SOURCE.get();
}
public static void setDataSource(String dataSource) {
THREAD_DATA_SOURCE.set(dataSource);
}
public static void clearDataSource() {
THREAD_DATA_SOURCE.remove();
}
}
2.编写SPRING 配置文件(ApplicationContext.xml)
3.注入dataSoure
...
4.编写数据库配置文件(dbconfig.properties)
driverClassName:oracle.jdbc.driver.OracleDriver
url1:jdbc:oracle:thin:@localhost:1521:ORCL
username:test
password:test
driverClassName2:oracle.jdbc.driver.OracleDriver
url2:jdbc:oracle:thin:@localhost:1521:ORCL
username2:test1
password2:test1
5.切换数据源
public String testChangeDataSource() throws Exception {
DynamicDataSourceHolder.setDataSource("dataSource2");//設置數據源
List resultList = (List) this.dao.findForList("TestDataSourceMapper.findById",new PageData());
JSONArray array = new JSONArray();
array.addAll(resultList);
return array.toJSONString();
}