Spring动态切换数据源

本文详细介绍了如何在Spring框架中配置C3P0连接池作为数据源,并实现动态数据源的切换。包括配置示例、动态数据源切换原理及其实现类的编写。

1.在spring配置文件配置c3p0数据源

  <bean id="aDatasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driverClassName.check}" />
        <property name="jdbcUrl" value="${jdbc.url.check}" />
        <property name="user" value="${jdbc.username.check}" />
	<property name="password" value="${jdbc.password.check}" />
	<property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
	<property name="minPoolSize" value="${jdbc.minPoolSize}" />
	<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
	<property name="maxIdleTime" value="${jdbc.maxIdleTime}" />
	<property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
	<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"></property>
    </bean>
2.配置动态切换数据源

 <bean id="dynamicdatasource" class="com.xx.jdbc.DynamicDataSource">  // class需继承spring动态切换数据源
    	<!-- 设置默认数据源 -->
     	<property name="defaultTargetDataSource" ref="aDatasource" />  
        <property name="targetDataSources">  
            <map key-type="java.lang.String">  
                 <entry key="aaaDatasource" value-ref="aDatasource" />
                 <entry key="bbbDatasource" value-ref="bDatasouce" /> 
                 <entry key="实现类属性值(bbbDatasource)" value-ref="引用数据源id" />	...
            </map>  
        </property>  
    </bean>  

3.切换数据源实现类

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynameDataSource extends AbstractRoutingDataSource {
	public static final String xDataSourceName = "aaaDatasource"; //数据源标识
	public static final String bDataSourceName = "bbbDatasource"; //数据源标识
//线程池private static final ThreadLocal<String> dataSource = new ThreadLocal<String>();//设置数据源public static void setDynameDataSource(String dataSourceName){dataSource.set(dataSourceName);}//关闭数据源public static void clearDataSource(){dataSource.remove();}/** * 获取当前数据源名称 * @return */public static String getDataSource(){return dataSource.get();}@Overrideprotected Object determineCurrentLookupKey() {return getDataSource();}}


4.测试数据源

//获取某个数据源		
DynameDataSource.setDynameDataSource(DynameDataSource.xDataSourceName);
//关闭数据源
DynameDataSource.clearDataSource();





转载请标识博客原文地址:http://blog.csdn.net/lvliyu/article/details/73656892



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值