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

2万+

被折叠的 条评论
为什么被折叠?



