使用Apache Commons DBCP配置多个数据库访问使用中有一些经验,小Tip记录下来。
1. BasicDataSource配置maxWait参数(单位为ms),在getConnection()得不到Connection时(例如由于连接池用光)超时maxWait毫秒将会抛出异常(例如org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted)。默认不配置该参数,getConnection()方法将等待到有连接可用,通常的情况是,如果连接池用光,此方法将一直等待不返回。
2. maxActive为连接池大小。maxIdle为连接池内保持的空闲连接最大数, minIdle为连接池保持的空闲连接最小数
3. 通过BasicDataSource 对象getConnection()获得的Connection,在使用完之后一定要关闭( conn.close() )! 在短期内频繁访问不关闭Connection的数据库操作方法,将很快把连接池用光(原来错误以为连接池会自动回收Connection的想法是错误的,从连接池出来的Connection,调用conn.close其实不是关闭Connection,而是回收),Connection的自动释放通常需要很长的时间(甚至怀疑能不能自动释放),所以程序里面不关闭的后果就是后来一直得不到Connection。不管是查询还是更新方法都要关闭。
自己做了个论坛程序,在测试时发现,进行几次与数据库的交互操作后,程序就会无响应。研究后发现,是因为DBCP连接池没有进行正确的配置。通过改变配置后,没有再出现程序无响应的情况发生。
原来的applicationContext.xml中的DBCP配置如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- driver for Derby-->
<property name="driverClassName">
<value>org.apache.derby.jdbc.ClientDriver</value>
</property>
<property name="url">
<value>jdbc:derby://localhost:1527/sample;create=true</value>
</property>
<property name="username">
<value>ahoo</value>
</property>
<property name="password">
<value>ahoo</value>
</property>
</bean>
修改后如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- driver for Derby-->
<property name="driverClassName">
<value>org.apache.derby.jdbc.ClientDriver</value>
</property>
<property name="url">
<value>jdbc:derby://localhost:1527/sample;create=true</value>
</property>
<property name="username">
<value>ahoo</value>
</property>
<property name="password">
<value>ahoo</value>
</property>
<!-- 初始化连接 -->
<property name="initialSize">
<value>20</value>
</property>
<!-- 最大连接数量 -->
<property name="maxActive">
<value>100</value>
</property>
<!-- 最大空闲连接 -->
<property name="maxIdle">
<value>30</value>
</property>
<!-- 最小空闲连接 -->
<property name="minIdle">
<value>10</value>
</property>
<!-- 是否在自动回收超时连接的时候打印连接的超时错误 -->
<property name="logAbandoned">
<value>true</value>
</property>
<!-- 是否自动回收超时连接 -->
<property name="removeAbandoned">
<value>true</value>
</property>
<!-- 超时时间(以s为单位) -->
<property name="removeAbandonedTimeout">
<value>20</value>
</property>
<!-- 超时等待时间(以ms为单位) -->
<property name="maxWait">
<value>1000</value>
</property>
</bean>
maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
接将被标记为不可用,然后被释放。设为0表示无限制。
MaxActive,连接池的最大数据库连接数。设为0表示无限制。
maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示
无限制。
*maxActive:最大连接数据库连接数,设 0 为没有限制
*maxIdle:最大等待连接中的数量,设 0 为没有限制
*maxWait:最大等待毫秒数, 单位为 ms, 超过时间会出错误信息
一般把maxActive设置成可能的并发量就行了
maxActive、maxIdle和maxWait参数:
maxActive是最大激活连接数,这里取值为20,表示同时最多有20个数据库连
接。maxIdle是最大的空闲连接数,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的
连接,而不被清除,随时处于待命状态。MaxWait是最大等待秒钟数,这里取值-1,表示无限等待,直到
超时为止,也可取值9000,表示9秒后超时。
分享到:
相关推荐
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,全称为"Commons DBCP"。它在Java应用中起到了管理和复用数据库连接的作用,从而提高应用程序的性能和效率。在这个"dbcp连接池使用...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,全称为"Jakarta DBCP"。它在Java应用中起到了管理和复用数据库连接的作用,从而提高应用程序的性能和效率。在Web项目开发中,DBCP...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,全称为"Commons DBCP"。它在Java应用中起到了管理和复用数据库连接的作用,从而提高应用程序的性能和效率。在给定的描述中提到,...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,全称为"Commons DBCP"。它在Java应用中起到了管理和复用数据库连接的作用,从而提高应用程序的性能和效率。在本压缩包中,包含了实现...
DBCP(Database Connection Pool)是Apache组织提供的一种开源数据库连接池实现,全称为"Jakarta DBCP"。它基于Java编写,旨在提高数据库访问效率,通过复用已存在的数据库连接,减少创建和销毁数据库连接时的开销,...
DBCP(Database Connection Pool)是Apache软件基金会的Commons DBCP项目提供的一个数据库连接池组件,它在Java应用程序中用于管理和复用数据库连接。连接池是提高数据库应用性能的重要手段,通过预先创建并维护一定...
DBCP(Database Connection Pool)是Apache Commons项目中的一个数据库连接池组件,它的全称为Commons DBCP。在Java应用程序中,特别是在服务器端的应用中,为了提高数据库访问效率,通常会使用连接池来管理数据库...
Java DBCP(Database Connection Pool)是Apache软件基金会下的Jakarta项目提供的一种数据库连接池实现。它是基于JDBC(Java Database Connectivity)的,主要用于管理数据库连接,提高数据库操作的性能和效率。...
Apache DBCP(Database Connection Pool)是Apache软件基金会下的一个开源项目,主要提供数据库连接池服务。数据库连接池在Java应用程序中扮演着重要的角色,它能够有效地管理数据库连接,提高应用性能并降低资源...
DBCP(Database Connection Pool)是Apache组织提供的一种开源数据库连接池组件,主要包含两个核心库:`commons-dbcp-1.2.2.jar`和`commons-pool-1.3.jar`。这两个JAR文件在Java应用程序中用于管理和复用数据库连接...
DBCP(Database Connection Pool)是Apache Commons DBCP项目提供的一种数据库连接池组件,它允许Java应用程序在多个并发用户之间复用数据库连接,从而提高应用性能并减少数据库资源的消耗。连接池的基本思想是初始...
DBCP(Database Connection Pool)是Apache Commons项目中的一个数据库连接池组件,主要目的是为了提高数据库连接的复用性,减少创建和销毁连接的开销,从而提升应用的性能。DBCP2是其第二个主要版本,提供了更稳定...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,全称为"Jakarta-DBCP"。它在Java应用中起到了管理和复用数据库连接的作用,从而提高应用程序的性能和效率。在SSH(Spring、Struts和...
DBCP(Database Connection Pool)是Apache软件基金会的Commons项目中的一个数据库连接池组件,它提供了数据源管理和数据库连接复用的功能,以提高应用程序的性能和效率。在Java Web开发中,DBCP常用于管理数据库...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,主要包含在`commons-dbcp`项目中。在给定的压缩包文件中,我们有三个关键的JAR文件: 1. `commons-dbcp2-2.4.0.jar`:这是DBCP的...
DBCP(Database Connection Pool)是由Apache组织提供的一个开源数据库连接池组件,它基于Jakarta Commons DBCP项目,旨在解决数据库连接创建与管理的问题。在这个场景中,"dbcp连接池所需包"指的是用于配置和使用...
用于实现DBCP连接池所用的JAR依赖文件,包括数据库驱动及创建连接池所需的其他依赖: * commons-collections * commons-dbcp2 * commons-logging * commons-pool2 * mysql-connector
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,全称为Apache Commons DBCP。它基于Jakarta-DBCP,是Java应用程序中管理数据库连接的一种高效方式,通过复用已存在的数据库连接来...