spring多数据源整合记录

spring-web项目多数据源配置

1.配置spring配置文件

<bean name="a-datasource" class="com.alibaba.druid.pool.DruidDataSsorce" init-method="init" destory-method="close" >
<poropety name="url" value=""/>
<poropety name="name" value=""/>
<poropety name="password" value=""/>
<poropety name="initialSize" value=""/>
</bean>

<bean name="b-datasource" class="com.alibaba.druid.pool.DruidDataSsorce" init-method="init" destory-method="close">
<poropety name="url" value=""/>
<poropety name="name" value=""/>
<poropety name="password" value=""/>
<poropety name="initialSize" value=""/>
</bean>

<bean id="DynamicDataSource" class="com.hxy.base.utils.DynamicDataSource">
	<propety name="targetDataSource">
	<map key-type="java.lang.String">
		<entry value-ref="a-dataSource" key="Asource"><entry>
		<entry value-ref="b-dataSource" key="Bsource"><entry>
	<propety name="defaultTargetDataSource" ref="dataSource"/>
</bean>

配置多数据源文件内AB两个数据源,DynamicDataSource为继承 AbstractRoutingDataSource也就是数据源路由的子类。

public class DynamicDataSource extends AbstractRoutingDataSource{
	@Override
	protected Object determinCurrentLookupKey(){
		//DataSourceContentHandler为自定义类用于切换数据源
		return DataSourceContentHandler.getDataSourceType();
}
}

DataSourceContentHandler中包含本地线程锁,避免由于并发引起的数据源切换混乱。

public class DataSourceContextHolder {
 
	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
 
	/**
	 * @Description: 设置数据源类型 
	 * @param dataSourceType 数据库类型 
	 * @return void 
	 * @throws
	 */
	public static void setDataSourceType(String dataSourceType) {
		System.err.println(dataSourceType);
		contextHolder.set(dataSourceType);
	}
 
	/**
	 * @Description: 获取数据源类型
	 * @param 
	 * @return String
	 * @throws
	 */
	public static String getDataSourceType() {
		return contextHolder.get();
	}
 
	/**
	 * @Description: 清除数据源类型
	 * @param
	 * @return void 
	 * @throws
	 */
	public static void clearDataSourceType() {
		contextHolder.remove();
	}

在业务层也就是service层 执行底层持久化方法前后使用切换,方法完毕后切换为默认数据源(缺点是使用不便代码冗余),也可以采用aop方式进行切点实现。在需要执行切换数据源方法加入自定义注解即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值