如何在spring框架中解决多数据源的问题
展开全部
spring 配置文件:
<!-- 数据源 A -->
<bean id="dataSourceA" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}" />
<property name="jdbcUrl" value="${urlScm}" />
<property name="user" value="${usernameScm}" />
<property name="password" value="${passwordScm}" />
</bean>
<!-- 数据源 B -->
<bean id="dataSourceB" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}" />
<property name="jdbcUrl" value="${urlWS}" />
<property name="user" value="${usernameWS}" />
<property name="password" value="${passwordWS}" />
</bean>
<!-- 多数据源管理,默认为 dataSourceScm 数据源 -->
<bean id="dataSource" class="com.common.dataSource.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="dataSourceA" value-ref="dataSourceA" />
<entry key="dataSourceB" value-ref="dataSourceB" />
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSourceA" />
</bean>
多数据源切换的基础类:
package com.common.dataSource;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DbContextHolder.getDbType();
}
}
切换的操作类:
package com.common.dataSource;
public class DbContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDbType(String dbType) {
contextHolder.set(dbType);
}
public static String getDbType() {
return (String) contextHolder.get();
}
public static void clearDbType() {
contextHolder.remove();
}
}
使用的时候调用 DbContextHolder.setDbType 方法,传入相应的在 spring 配置文件里面的配置的数据源名称就可以了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |