tomcat_dbcp连接池详解_王远

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DBCP连接池详解

深圳市拜特科技有限公司

1编写目的

本文详细介绍了DBCP连接池的各个配置参数的含义,并通过实际例子演示不同的参数设置可能参数的结果。

2适用对象

项目实施人员

3参考资料

4知识文件主要内容

4.1连接池知识简介

总所周知建立数据库连接是一个非常耗时耗资源的行为,因此现代的Web中间件,无论是开源的Tomcat、Jboss还是商业的websphere、weblogic都提供了数据库连接池功能,可以毫不夸张的说,数据库连接池性能的好坏,不同厂商对连接池有着不同的实现,本文只介绍拜特公司使用较多的开源web中间件Tomcat中默认的连接池DBCP (DataBase connection pool)的使用。

4.2 Tomcat下配置连接池

下面以tomcat5.5.26为例来介绍如何配置连接池

1:需要的jar

在tomcat的安装目录common\lib下有一个naming-factory-dbcp.jar,这个是tomcat 修改后的dbcp连接池实现,同时为了能够正常运行,还需要commons-pool.jar。

2:建立context文件

进入到conf\Catalina\localhost新建一个上下文文件,文件的名称既为将来要访问是输入url 上下文名称,例如我们建立一个名为btweb的文件内容如下:

name="jdbc/btdb1"

type="javax.sql.DataSource"

factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

username="v10"

password="v10"

driverClassName="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:thin:@127.0.0.1:1521:cahs"

maxActive="5"

maxIdle="3"

maxWait="5000"

removeAbandoned="true"

removeAbandonedTimeout="60"

testOnBorrow="true"

validationQuery="select count(*) from bt_user"

logAbandoned="true"

/>

4.3参数分步介绍

◆数据库连接相关

username="v10"

password="v10"

driverClassName="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:thin:@127.0.0.1:1521:cahs"

◆jndi相关

name="jdbc/btdb1"

type="javax.sql.DataSource"

factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

factory默认是org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory,tomcat也允许采用其他连接实现,不过默认使用dbcp。

◆连接数控制与连接归还策略

maxActive="5"

maxIdle="3"

minIdle=”2”

maxWait="5000"

◆应对网络不稳定的策略

testOnBorrow="true"

validationQuery="select count(*) from bt_user"

◆应对连接泄漏的策略

removeAbandoned="true"

removeAbandonedTimeout="60"

logAbandoned="true"

如下图所示:连接池处于应用程序与数据库之间,一方面应用程序通过它来获取连接,归还连接,另一方面连接又需要从数据里获取连接,归还连接。

步骤1:系统启动

系统启动时,初始化连接池,由于没有任何请求连接池中连接数为0。

maxActive="5"

表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其他应用造成影响,如果一个数据库只是用来支持一个应用那么maxActive理论上可以设置成该数据库可以支撑的最大连接数。maxActive只是表示通过连接池可以并发的获取的最大连接数。

从图上我们可以看到连接的获取与释放是双向,当应用程序并发请求连接池时,连接池就需要从数据库获取连接,那么但应用程序使用完连接并将连接归还给连接池时,连接池是否也同时将连接归还给数据库呢?很显然答案是否定的,如果那样的话连接池就变得多此一举,不但不能提高性能,反而会降低性能,那么但应用成归还连接后,连接池如何处理呢?

maxIdle="3"

如果在并发时达到了maxActive=5,那么连接池就必须从数据库中获取5个连接来供应用程序使用,当应用程序关闭连接后,由于maxIdle=3,因此并不是所有的连接都会归还给数据库,将会有3个连接保持在连接池种中,状态为空闲。

minIdle=”2”

最小默认情况下并不生效,它的含义是当连接池中的连接少有minIdle,系统监控线程将启动补充功能,一般情况下我们并不启动补充线程。

问题:如何设置maxActive和maxIdle?

理论上讲maxActive应该设置成应用的最大并发数,这样一来即便是在最大并发的情况下,应用依然能够从连接池中获取连接,但是困难时的是我们很难准确估计到最大并发数,设置成最大并发数是一种最优的服务质量保证,事实上,如果某个用户登录提示系统繁忙,那么在他再次登录

时,可能系统资源已经充足,对于拜特资金管理系统我们建议将maxActive设置为系统注册人数的十分之一到二十分之一之间。例如系统的注册人数为1000,那么设置成50-100靠近100的数字,例如85或90。

maxIdle对应的连接,实际上是连接池保持的长连接,这也是连接池发挥优势的部分,理论

上讲保持较多的长连接,在应用请求时可以更快的响应,但是过多的连接保持,反而会消耗数据

相关文档
最新文档