项目1数据库连接池配置
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@192.168.249.50:1521:orcl">
</property>
<property name="username" value="test_0407" />
<property name="password" value="test_0407" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">com.eka.util.MyDialect</prop>
<prop key="hibernate.c3p0.min_size">10</prop>
<prop key="hibernate.c3p0.max_size">50</prop>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<prop key="hibernate.c3p0.timeout">1000</prop>
<!-- 最大的PreparedStatement的数量 -->
<prop key="hibernate.c3p0.max_statements">100</prop>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<prop key="hibernate.c3p0.acquire_increment">2</prop>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<prop key="hibernate.c3p0.idle_test_period">120</prop>
<!-- 每次都验证连接是否可用 -->
<prop key="hibernate.c3p0.validate">false</prop>
</props>
</property>
</bean>
如果是使用hql则使用c3p0连接池,如果是使用sql,则使用dbcp连接池。
项目2连接池配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@192.168.249.50:1521:orcl">
</property>
<property name="username" value="test_0407" />
<property name="password" value="test_0407" />
</bean>
现在的情况是:
项目1通过webservice调用项目2,项目2在调用中多次跟数据库交互(都是简单的增改,执行速度都是比较快的,调用的方法在job中执行正常,不存在泄露情况)。两个项目使用同一个数据库,数据库oracle连接池最大是150,现在的问题是,如果项目1多次调用项目2之后,项目1就一直处于等待登陆状态(使用pstrace查看锁在查询数据库那里),请各位大大帮忙分析一下!
令如果将项目1和项目2中的dbcp连接池配置调整为:
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@192.168.249.50:1521:orcl"/>
<property name="username" value="test_0407"/>
<property name="password" value="test_0407"/>
<!--maxActive: 最大连接数量-->
<property name="maxActive" value="50"/>
<!--minIdle: 最小空闲连接-->
<property name="minIdle" value="10"/>
<!--maxIdle: 最大空闲连接-->
<property name="maxIdle" value="50"/>
<!--initialSize: 初始化连接-->
<property name="initialSize" value="10"/>
<!-- 连接被泄露时是否打印 -->
<property name="logAbandoned" value="true"/>
<!--removeAbandoned: 是否自动回收超时连接-->
<property name="removeAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<property name="removeAbandonedTimeout" value="180"/>
<!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒-->
<property name="maxWait" value="10000"/>
<!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->
<property name="timeBetweenEvictionRunsMillis" value="180000"/>
<!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
<property name="numTestsPerEvictionRun" value="25"/>
<!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程-->
<property name="minEvictableIdleTimeMillis" value="10000"/>
<property name="validationQuery" value="SELECT sysdate FROM DUAL"/>
</bean>
问题得到解决!(不知道是不是暂时被解决)
疑问:1,能否解释一下,出现这种状况的原因,以及为什么这样配置可以解决?
2, dbcp默认连接池中,连接池连接被使用后,什么时候被释放变成空闲线程(是否在调完数据库之后立刻释放),空闲线程释放可以被再次使用? 空闲线程数量会不会大于最大连接池大小,如果大于会发生什么?
3,oracle连接池和dbcp连接池之间有什么关联关系?
分享到:
相关推荐
c3p0和DBCP(BasicDataSource)是两个广泛应用的开源数据库连接池实现。 c3p0是一个完全开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0-0.9.5.2.jar包含了c3p0的运行时库,而...
**DBCP连接池的工作原理:** 1. **初始化**:在应用程序启动时,DBCP会预先创建一定数量的数据库连接并放入连接池。 2. **请求连接**:当程序需要与数据库交互时,它向连接池请求一个连接。连接池检查是否有空闲的...
本资源包包含三个主流的数据库连接池实现:c3p0、dbcp和Druid。它们各有特点,适应不同的应用场景。 1. **c3p0**:全称为Com形3P0,是由Miquel Arquero开发的一个开源的JDBC连接池。c3p0提供了完善的连接池管理和...
综上所述,DBCP和C3P0都提供了丰富的配置选项,可以根据实际需求灵活调整连接池的大小和行为。针对文中提到的异常情况,建议检查连接池配置是否合理,例如适当增加`maxIdle`、`minIdle`等值,确保有足够的空闲连接...
c3p0-0.9.5.1,commons-dbcp-1.4,commons-pool-1.3,druid-1.0.26,junit-4.7等jar包,可供选择,一般在后期做项目的时候都离不开,必定会用到一个连接池,c3p0、或者阿里巴巴的druid、或者dbcp,dbcp很少用
DBCP和C3P0连接池常用配置参数一览表DBCP和C3P0连接池常用配置参数一览表DBCP和C3P0连接池常用配置参数一览表
"数据库连接池dbcp和c3p0jar包"这个压缩包包含了这两个库的JAR文件,开发者可以解压并导入到自己的项目中,然后通过简单的代码配置来启用数据库连接池服务。例如,使用Spring框架,可以在配置文件中声明数据源,指定...
本文主要探讨了三个常用的数据库连接池:DBCP、c3p0和Druid,以及它们的配置说明。 1. **DBCP(Apache Commons DBCP)** DBCP是Apache Commons项目的一部分,它依赖于Apache Commons Pool对象池机制来管理数据库...
包含两种连接池jar包:c3p0-0.9.1.jar和commons-collections4-4.1.jar、commons-dbcp2-2.1.1.jar、commons-logging-1.2.jar、commons-pool2-2.4.2.jar和dbcp与c3p0详细配置文档
C3P0连接池是Java开发中常用的数据库连接池组件,它能够有效地管理和优化数据库连接,提高应用程序的性能和效率。C3P0由Mithun Das Laskar创建,是一个开源项目,广泛应用于各种Java Web应用中。下面将详细介绍C3P0...
DBCP、C3P0,JNDI 连接池配置使用,可以参考一下。
c3p0,全称为com.mchange.v2.c3p0,是一个开源的JDBC连接池,它提供了比DBCP更丰富的功能和配置选项。c3p0的特点包括: 1. 自动检测并修复损坏的连接。 2. 自动调整连接池大小以适应负载变化。 3. 支持连接测试和...
"c3p0 还有其他连接池"这个标题表明我们将讨论c3p0以及其他类型的数据库连接池。 c3p0是一款开源的Java数据库连接池实现,由Miquel Arquero创建,它是Comprehensive Database Connection Pooling的缩写。c3p0提供了...
本文将详细介绍两种广泛使用的数据库连接池——Druid和C3P0,以及它们的主要特点和使用场景。 **Druid连接池** Druid是由阿里巴巴开源的高性能、功能强大的数据库连接池。它不仅提供了基础的数据库连接池功能,还...
c3p0和DBCP(Apache Commons DBCP)是两种常见的开源Java数据库连接池实现。本资源包提供了这两个连接池的jar包以及相关配置文件,还有MySQL的驱动包,使得开发者可以轻松地在项目中集成这些组件。 首先,`c3p0`是...
本文将详细介绍三大常用的数据库连接池——C3P0、DBCP和Druid,以及它们的主要特点和使用方法。 1. C3P0 C3P0是一个开源的JDBC连接池,由Miquel Catalan开发。它提供了全面的JDBC API支持,包括JDBC3规范和JDBC2的...
本主题将深入探讨两种流行的数据库连接池实现:DBCP(Jakarta DB Connection Pool)和C3P0,以及如何配置它们。 **DBCP(Jakarta DB Connection Pool)** DBCP是Apache软件基金会的一个项目,提供了一个符合Java ...
总的来说,Java DBCP连接池是Java应用中管理和优化数据库连接的有效工具,通过合理配置和使用,能够显著提升应用的数据库访问性能,同时降低资源消耗。在实际开发中,开发者应根据项目需求和性能要求选择合适的连接...
局限性:相比其他如C3P0、HikariCP等连接池,DBCP在性能和稳定性方面稍逊一筹,且在高并发环境下可能出现连接泄漏问题。 7. **替代方案**: 随着技术的发展,更现代的数据库连接池如HikariCP因其高效和稳定,已经...