首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

多链接池动态数据源的配备

2012-09-20 
多链接池动态数据源的配置?xml version1.0 encodingUTF-8?beans xmlnshttp://www.springframew

多链接池动态数据源的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
?xmlns:tx="http://www.springframework.org/schema/tx"
?xsi:schemaLocation="
?????? http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
?????? http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
?????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
?<bean id="dataSourceA"? parent="parentDataSource">
?<property name="user" value="root"></property>
??<property name="password" value="123456"></property>
??<property name="jdbcUrl"
???value="jdbc:mysql://localhost:3306/u5_cn?useUnicode=true&amp;characterEncoding=utf-8"></property>
?</bean>
?<bean id="dataSourceB"? parent="parentDataSource">
??<property name="jdbcUrl"
???value="jdbc:mysql:/localhost:3306/szdc?useUnicode=true&amp;characterEncoding=utf-8"></property>
??<property name="user" value="root"></property>
??<property name="password" value="123456"></property>
?</bean>
?<bean id="parentDataSource" value="com.mysql.jdbc.Driver">
??</property>
??<!--
???<property name="jdbcUrl"??? 220.231.143.237???
???value="jdbc:mysql://localhost:3306/u5_cn?useUnicode=true&amp;characterEncoding=utf-8"></property>
???<property name="user" value="root"></property> <property
???name="password" value="123456"></property>
??--><!--连接池中保留的最小连接数。-->
??<property name="minPoolSize">
???<value>5</value>
??</property>
??<!--连接池中保留的最大连接数。Default: 15 -->
??<property name="maxPoolSize">
???<value>30</value>
??</property>
??<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
??<property name="initialPoolSize">
???<value>10</value>
??</property>
??<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
??<property name="maxIdleTime">
???<value>60</value>
??</property>
??<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
??<property name="acquireIncrement">
???<value>5</value>
??</property>
??<!--
???JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
???属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
???如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0
??-->
??<property name="maxStatements">
???<value>0</value>
??</property>
??<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
??<property name="idleConnectionTestPeriod">
???<value>60</value>
??</property>
??<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
??<property name="acquireRetryAttempts">
???<value>30</value>
??</property>
??<!--
???获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
???保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
???获取连接失败后该数据源将申明已断开并永久关闭。Default: false
??-->
??<property name="breakAfterAcquireFailure">
???<value>true</value>
??</property>
??<!--
???因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
???时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
???等方法来提升连接测试的性能。Default: false
??-->
??<property name="testConnectionOnCheckout">
???<value>false</value>
??</property>
?</bean>
?<!--动态数据源-->
?<bean id="dataSource">
??<property name="targetDataSources">
???<map key-type="java.lang.String">
????<entry key="a" value-ref="dataSourceA"></entry>
????<entry key="b" value-ref="dataSourceB"></entry>
???</map>
??</property>
??<property name="defaultTargetDataSource" ref="dataSourceA"></property>
?</bean>
?<bean id="sessionFactory"
??/>
??</property>
??<property name="hibernateProperties">
???<props>
????<prop key="hibernate.dialect">
?????org.hibernate.dialect.MySQLInnoDBDialect
????</prop>
????<prop key="hibernate.show_sql">true</prop>
????<prop key="hibernate.generate_statistics">true</prop>
????<prop key="hibernate.connection.release_mode">auto</prop>
????<prop key="hibernate.autoReconnect">true</prop>
???</props>
??</property>
??<property name="mappingResources">
???<list>

???</list>
??</property>
?</bean>

?

DynamicDataSource 继承 AbstractRoutingDataSource

具体代码

public class DynamicDataSource extends AbstractRoutingDataSource
{

?@Override
?protected Object determineCurrentLookupKey() {
??// TODO Auto-generated method stub
??return CustomerContextHolder.getCustomerType();
?}
?
}

?

public class CustomerContextHolder {
? private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();??
??
???? public static void setCustomerType(String customerType) {??
???????? contextHolder.set(customerType);??
???? }??
??
???? public static String getCustomerType() {??
???????? return (String) contextHolder.get();??
???? }??
??
???? public static void clearCustomerType() {??
???????? contextHolder.remove();??
???? }??
}

热点排行