1.在XML中配置对应的bean
<!--数据源dataSourceLocal-->
<bean id="dataSourceLocal" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.className}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--数据源dataSource137-->
<bean id="dataSource137" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.localDataBase.className}" />
<property name="url" value="${jdbc.localDataBase.url}" />
<property name="username" value="${jdbc.localDataBase.username}" />
<property name="password" value="${jdbc.localDataBase.password}" />
</bean>
<!--将数据源引入的dataSource-->
<bean id="dataSource" class="com.simple.common.dataconfig.DynamicDataSource">
<!--将两个数据源引入到Map<dataSourceName,dataSource>-->
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSourceLocal" key="dataSourceLocal"></entry>
<entry value-ref="dataSource137" key="dataSource137"></entry>
</map>
</property>
<!--指定默认使用的数据源-->
<property name="defaultTargetDataSource" ref="dataSourceLocal">
</property>
</bean>
2.自己实现DynamicDataSource这个bean
package com.simple.common.dataconfig;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
//需要继承AbstractRoutingDataSource,通过determineCurrentLookupKey方法设置当前数据源
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDBType();
}
}
3.封装数据源
package com.simple.common.dataconfig;
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder =
new ThreadLocal<String>();
//设置使用的数据源,dbType为bean的名字(xml中配置了dataSourceLocal,dataSource137)
public static void setDBType(String dbType) {
contextHolder.set(dbType);
}
//获取当前使用的数据源
public static String getDBType() {
return ((String) contextHolder.get());
}
//使用默认数据源
public static void clearDBType() {
contextHolder.remove();
}
}
4.实际调用用的类
package com.simple.common.dataconfig;
//设置使用的数据源,获取使用的数据源
public class DataSourceGetSet {
// Oracle数据库
private static final String WEBADMORACLE = "dataSource137";
// 本地数据源--MYSQL数据库
private static final String LOCALMYSQL = "dataSourceLocal";
/**
* 使用137环境数据源
* @return 配置成功返回true
*/
public static boolean SetDataSourceTO137() {
DataSourceContextHolder.setDBType(WEBADMORACLE);
String DBType = DataSourceContextHolder.getDBType();
if (WEBADMORACLE.equals(DBType)) {
return true;
}
return false;
}
/**
* 使用本地环境数据源
* @return 配置成功返回true
*/
public static boolean SetDataSourceTOLocal() {
DataSourceContextHolder.setDBType(LOCALMYSQL);
String DBType = DataSourceContextHolder.getDBType();
if (LOCALMYSQL.equals(DBType)) {
return true;
}
return false;
}
/**
* 获取当前数据源名称
*/
public static String GetDBType(){
return DataSourceContextHolder.getDBType();
}
}
如果需要配置更多数据源,同理可知!