`
yjingzeming
  • 浏览: 45337 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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>
    </parameter>
    <parameter>
    <name>idleConnectionTestPeriod</name>
    <value>60</value>
    </parameter>
    <parameter>
    <name>maxIdleTime</name>
    <value>60</value>
    </parameter>
    </ResourceParams>

driverClass
jdbcUrl
user
password
minPoolSize
maxPoolSize
initialPoolSize

acquireIncrement 池中没有空闲连接时,一次请求获取的连接数
maxIdleTime 池中连接最大空闲时间
acquireRetryAttempts 获取连接失败后,重新尝试的次数
acquireRetryDelay 尝试连接间隔时间,毫秒
checkoutTimeout 等待连接时间,0为无限等待,毫秒
DebugUnreturnedConnectionStackTraces true,false,是否收回未返回的活动连接
unreturnedConnectionTimeout 活动连接的时间.
DBCP,C3P0,Proxool,BoneCP参数介绍
c3p0的最大空闲时间为什么不起作用。(新dbcp问题)
DBCP连接池配置参数说明及优化

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没有起作用呢?


c3p0:
driverClass
jdbcUrl
user
password
minPoolSize
maxPoolSize
initialPoolSize

acquireIncrement 池中没有空闲连接时,一次请求获取的连接数
maxIdleTime 池中连接最大空闲时间
acquireRetryAttempts 获取连接失败后,重新尝试的次数
acquireRetryDelay 尝试连接间隔时间,毫秒
checkoutTimeout 等待连接时间,0为无限等待,毫秒
DebugUnreturnedConnectionStackTraces true,false,是否收回未返回的活动连接
unreturnedConnectionTimeout 活动连接的时间.

c3p0中的问题:
unreturnedConnectionTimeout是给每个活动连接一个时间限制,到点儿就收回,不管有没有正在使用连接.这样不是太好,应该是从最后一次使用连接才开始计时才好.那有没有这样的一个参数从最后一次使用计时呢? .

c3p0与dbcp区别:
  dbcp没有自动的去回收空闲连接的功能   c3p0有自动回收空闲连接功能

proxool
在src下面proxool.xml文件中
<?xml version="1.0" encoding="UTF-8"?>  
<something-else-entirely>  
    <proxool>  
        <alias>DBPool</alias>  
        <driver-url>
            jdbc:oracle:thin:@192.168.1.110:1521:sttri
        </driver-url>  
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>  
        <driver-properties>
            <property name="user" value="用户名" />  
            <property name="password" value="密码" />  
        </driver-properties>
        <!-- 连接最大活动时间(毫秒)--> 
        <maximum-active-time>120000</maximum-active-time>  
        <!-- 连接最大生命时间 (毫秒)-->
        <maximum-connection-lifetime>36000000</maximum-connection-lifetime>  
        <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 --> 
        <house-keeping-sleep-time>60000</house-keeping-sleep-time>
        <!-- 并发数 -->
        <simultaneous-build-throttle>200</simultaneous-build-throttle>  
        
		<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> 
		<maximum-new-connections>20</maximum-new-connections>
		        
        <!-- 每次新增连接数 -->  
        <prototype-count>2</prototype-count>  
        <!--允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->  
        <maximum-connection-count>300</maximum-connection-count>  
        <!-- 最少保持的空闲连接数 -->  
        <minimum-connection-count>5</minimum-connection-count>
        
        <house-keeping-test-sql>select sysdate from dual </house-keeping-test-sql> 
        <!-- 
        <statistics>15s,10m,1d</statistics>
        <statistics-log-level>INFO</statistics-log-level>
         -->
    </proxool>  
</something-else-entirely>  

在src下的hibernage.cfg.xml
<session-factory>
	
	 	<property name="hibernate.proxool.pool_alias">  
            DBPool  
    </property>  
    <property name="hibernate.proxool.xml">proxool.xml</property>  
    <property name="hibernate.connection.provider_class">  
            org.hibernate.connection.ProxoolConnectionProvider  
    </property>
    
    <property name="hibernate.proxool.existing_pool">false</property>  
    <property name="dialect">
            org.hibernate.dialect.OracleDialect
    </property>  
    <!-- 设置数据库名 当url没有指定数据库时设置 -->
<!--    <property name="default_catalog">orcl</property>-->
    <property name="hibernate.show_sql">true</property>  
    <property name="hibernate.format_sql">true</property>

    <!-- 启用查询缓存 -->  
    <property name="hibernate.cache.use_query_cache">false</property>  
  
		<mapping resource="com/bean/hbm/TestBean.hbm.xml" />
		
	</session-factory>

因为hibernate宣布不再支持DBCP,所以SSH中,连接池最好使用proxool。


参考http://www.iteye.com/topic/134698
http://baike.baidu.com/view/2098784.htm
分享到:
评论

相关推荐

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    c3p0、proxool、dbcp数据库连接池

    本文将深入探讨三个常用的数据库连接池:C3P0、DBCP和Proxool,以及如何结合Log4j2进行日志记录。 ### C3P0 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的核心...

    三大连接池参数说明(DBCP\C3P0\Proxool)

    【三大连接池参数详解】 ...总结来说,三大连接池——DBCP、C3P0 和 Proxool,各有其特点和配置选项。选择合适的连接池并正确配置这些参数,能够提高数据库操作的效率,减少资源消耗,并确保系统的稳定运行。

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。其特点包括自动测试连接、空闲连接检测以及多线程并发控制等。C3P0通过配置参数可以调整连接池的大小、超时时间、空闲...

    各种数据源配置参数列表(Druid、DBCP、C3P0、JBoss、Weblogic、Proxool)

    Druid、DBCP、C3P0、JBoss、Weblogic、Proxool 文档中包括 以上各个数据源配置参数中文含义,并不包括配置实例,请注意。

    数据连接池用法(C3PO,proxool,dbcp,bonecp)

    1. 导入必要的依赖库,包括c3p0-0.9.1.2.jar、commons-logging-1.1.1.jar和spring-2.5.6.jar。 2. 在Spring的配置文件(如`applicationContext.xml`)中声明C3PO的数据源,设置相应的数据库连接属性,如驱动类、URL...

    c3p0详细配置

    C3P0 是一个开源的 JDBC 连接池,它实现了数据源和 JNDI 绑定,支持 JMX 监控,提供了比 DBCP 和 Proxool 更优秀的性能和稳定性。C3P0 配置是通过一个 XML 文件(通常命名为 `c3p0-config.xml`)进行的,该文件包含...

    几种常用的Java数据源解决方案

    本文将详细介绍几种常用的数据源解决方案及其配置方法,包括JNDI方式创建`DataSource`、Apache提供的简单连接池创建数据源、C3P0方式创建数据源、Proxool方式创建数据源以及BoneCP方式创建数据源。 #### JNDI 方式...

    Hibernate的连接池和数据源配置

    Hibernate的三种连接池设置C3P0、Proxool和DBCP. 详细说明及配置方法 Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.

    DBPoolDemo:jdbc 池,包含 C3P0、DBCP、Proxool、Druid、tomcat-jdbc

    本篇文章将详细讲解标题中提到的五种主流Java数据库连接池:C3P0、DBCP、Proxool、Druid以及tomcat-jdbc,并逐一分析它们的特点、使用方法以及优缺点。 1. **C3P0** C3P0是一个开源的JDBC连接池,它实现了数据源和...

    proxool连接池使用详细说明

    虽然Proxool功能强大,但与C3P0、HikariCP、DBCP等其他连接池相比,Proxool的活跃度较低,社区支持和更新较少。因此,在选择连接池时,应根据项目需求和社区活跃度进行评估。 总的来说,Proxool连接池提供了一种...

    spring整合数据库连接的几种方式

    以下是Spring整合数据库连接的三种主要方式:DBCP、C3P0和Proxool,以及它们各自的特点和使用方法。 1. **DBCP(Apache Commons DBCP)** - DBCP全称为Apache Commons Database Connection Pool,是由Apache ...

    Hibernate3.2连接池

    本文将详细阐述如何在Hibernate 3.2中配置和使用连接池,包括C3P0、DBCP和通过JNDI从容器获取连接池。 1. **使用Hibernate自带的连接池** Hibernate 3.2虽然自带了一个连接池,但由于性能和稳定性问题,官方并不...

    java连接池的配置

    java连接池的配置 里面有C3P0连接池在tomcat中的详细配置 Java反射机制总结,tomcat下配置数据库连接池DBCP、C3P0、Proxool 总结spring下配置dbcp,c3p0,proxool数据源链接池

    proxool连接池

    尽管Proxool具有很多优点,但在现代开发中,更常见的是使用如HikariCP、C3P0、DBCP或Apache DBCP2等其他连接池。这些连接池在性能、稳定性、社区支持和功能方面可能更胜一筹。然而,Proxool 的简单性和易于配置使其...

    关于JAVA的数据库连接池的探讨.pdf

    对于提供连接池的数据源来说,除了Apache的DBCP以外,还有C3P0、Proxool、BoneCP等。具体如表1所示。 表1 基于JAVA的带连接池的数据源组件 序号 数据源名称 依赖的JAR包 实现的功能 1 Apache DBCP dbcp.jar、pool....

    spring下的各种连接池的比较算法及代码程序.doc

    本篇文章将深入探讨Spring环境下几种常见的连接池实现,包括C3P0、DBCP以及Proxool,分析它们的特性、配置方法以及各自的优缺点。 1. **Apache DBCP (BasicDataSource)** DBCP是Apache Commons库中的一个数据源...

Global site tag (gtag.js) - Google Analytics