用到一个项目,需要整合2个不同的数据库!
现将代码贴下,以备后用:
1、创建静态映射类,该类映射动态数据源
Java代码 收藏代码
public class DataSourceMap {
public static final String Analyse="Analyse";
public static final String DLmarket= "DLmarket";
}
2、创建数据库连接配置容器 类
Java代码 收藏代码
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setCustomerType(String customerType){
contextHolder.set(customerType);
}
public static String getCustomerType() {
return contextHolder.get();
}
public static void clearCustomerType() {
contextHolder.remove();
}
}
3、创建动态数据源切换类
Java代码 收藏代码
public class DynamicDataSource extends AbstractRoutingDataSource{
@Override
protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
String customerType="";
if(DataSourceContextHolder.getCustomerType()!=null){
customerType = DataSourceContextHolder.getCustomerType().toString();
}
return customerType;
}
}
该类继承AbstractRoutingDataSource,并重写determineCurrentLookupKey方法
4、在spring中配置多数据源
Xml代码 收藏代码
<bean id="analyseDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
xxx...
</bean>
<bean id="dlmarketDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url_dlmarket}" />
<property name="username" value="${jdbc_username_dlmarket}" />
<property name="password" value="${jdbc_password_dlmarket}" />
xxx...
<bean>
<!-- 多数据源的映射关系 -->
<bean id="dataSource" class="com.current.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<!-- key的值必须要和静态键值对照类中的值相同 -->
<entry value-ref="analyseDataSource" key="Analyse"></entry>
<entry value-ref="dlmarketDataSource" key="DLmarket"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="analyseDataSource"></property>
</bean>
其他的SessionFactory 事务管理器配置都不需要修改。
5、在Action中切换数据源
Java代码 收藏代码
public void getList(){
DataSourceContextHolder.setCustomerType(DataSourceMap.DLmarket);
int id=1;
List<Chaining> chainList = chainService.getList(id);
System.out.println(chainList.get(0).getChaining());
}