c3p0如何配置多数据源的解决方法

c3p0如何配置多数据源的解决方法

一、问题描述:

    项目开发时,用c3p0管理数据连接。但是项目需要动态连接两个以上的数据库,如何用c3p0配置多数据源。

二、解决方法:

    使用c3p0结合spring提供的数据源路由(DataSource Routing)对象,该对象构造了一个存储多数据源的Map,可以根据指定的key动态的查找对应的数据源。

具体实现如下:

1.编写c3p0配置:



	
		${jdbc.driverClassName}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

2.数据源配置:



       
           ${jdbc.from.url}
       
       
           ${jdbc.from.username}
       
       
           ${jdbc.from.password}
       


       
           ${jdbc.to.url}
       
       
           ${jdbc.to.username}
       
       
           ${jdbc.to.password}
       

3.动态数据源加载配置:



	
		
			
			
		
	
	

4.实现spring的数据源路由对象:

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		String sourceType = CustomContextHolder.getCustomerType();
		//System.out.println("DataSourceType: "+sourceType);
		return sourceType;
	}
}

5.编写自定义的数据源key:

public class CustomContextHolder {
	private static final ThreadLocal contextHolder = new ThreadLocal();
	public static final String DATA_SOURCE_FROM = "fromDataSource";//对应动态数据源配置中的key
	public static final String DATA_SOURCE_TO = "toDataSource";

	public static void setCustomerType(String customerType) {
		 contextHolder.set(customerType);
	}

	public static String getCustomerType() {
		return contextHolder.get();
	}

	public static void clearCustomerType() {
		contextHolder.remove();
	}
}


你可能感兴趣的:(随笔)