日期:2014-05-16  浏览次数:20440 次

c3p0,dbcp,proxool的三种数据源的使用
dbcp:
在applicationContext.xml中配置,
<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName">
		<value>oracle.jdbc.driver.OracleDriver</value>
		</property>
		    <property name="url">
	    <value>jdbc:oracle:thin:@192.168.1.110:1521:orcl</value> 
		    </property>
		    <property name="username">
		      <value>用户名</value>
		    </property>
		    <property name="password">
		      <value>密码</value>
		    </property>

		<property name="maxActive">
			<value>50</value>
		</property>
		<property name="maxIdle">
			<value>2</value>
		</property>
		<property name="maxWait">
			<value>120000</value>
		</property>
		<property name="defaultAutoCommit">
			<value>false</value>
		</property>

		<property name="testOnBorrow">
			<value>true</value>
		</property>

		<property name="testOnReturn">
			<value>false</value>
		</property>

		<property name="validationQuery">
			<value>select 1 from dual</value>
		</property>
	</bean>

driverClassName
url
username
password
上面四个分别是驱动,连接字符串,用户名和密码

maxActive 连接池支持的最大连接数
maxIdle 连接池中最多可空闲maxIdle个连接
minIdle 连接池中最少空闲maxIdle个连接
initialSize 初始化连接数目
maxWait 连接池中连接用完时,新的请求等待时间,毫秒
timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每

timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止

minEvictableIdleTimeMillis 连接池中连接可空闲的时间,毫秒

removeAbandoned true,false,是否清理removeAbandonedTimeout秒没有使用的活动连接,清理后并没有放回连接池
removeAbandonedTimeout 活动连接的最大空闲时间
logAbandoned true,false,连接池收回空闲的活动连接时是否打印消息


minEvictableIdleTimeMillis,removeAbandonedTimeout这两个参数针对的连接对象不一样,minEvictableIdleTimeMillis针对连接池中的连接对象,removeAbandonedTimeout针对未被close的活动连接.

在dbcp使用中遇到的问题:
当短时间之内活动连接达到maxActive,再请求连接,等maxWait秒后连接池就会报出错来:Cannot get a connection, pool exhausted.在这maxWait秒里removeAbandoned并没有起作用,出错后连接池就会把所有的连接断开,为什么这时候removeAbandoned没有起作用呢?
弊端:日前,Hibernate官方宣布由于Bug太多不再支持DBCP,而推荐使用 Proxool或C3P0。


c3p0:
在tomcat/config/service.xml
	<Resource name="jdbc/hb" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource" />
    <ResourceParams name="jdbc/hb"> 
    <parameter>
    <name>factory</name>
    <value>org.apache.naming.factory.BeanFactory</value>
    </parameter>
    <parameter>
    <name>driverClass</name>
    <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter> 
    <parameter>
    <name>jdbcUrl</name>
    <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
    </parameter> 
    <parameter>
    <name>user</name>
    <value>hb</value>
    </parameter>
    <parameter>
    <name>password</name>
    <value>hb</value>
    </parameter> 
    <parameter>
    <name>minPoolSize</name>
    <value>30</value>
    </parameter> 
    <parameter>
    <name>maxPoolSize</name>
    <value>200</value>
    </parameter>
    <parameter>
    <name>initialPoolSize</name>
    <value>30</value>
    </parameter>
    <parameter>
    <name>acquireIncrement</name>
    <value>30</value>
    </