DBCP连接池简介

DBCP 连接池简介

1、数据库连接基础

       数据库连接池基础主要包括以下三个方面的内容:数据库连接池的基本概念、数据库连接池的工作原理、Java 开源的连接池。下面将从这三个方面一一介绍:

(1)数据库连接池的基本概念

       数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的 Web 应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。因此,数据库连接池正是针对这个问题提出来的。

       数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再是重新建立一个数据库连接;释放空闲时间超过最大空闲时间的数据库连接,以避免因为没有释放数据库连接而引起的数据库连接遗漏。

       数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保持至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数时,这些请求将被加入到等待队列中。

(2)数据库连接池的工作原理

       下面请看一个具体的数据库连接池工作原理示意图:

 

 

 

       图中所示的是一个 Web 应用申请连接,实际上是从连接池里取得一个连接,使用完连接后又返回到该连接池容器中。

(3)Java 开源的连接池

       由于 Java 的开源特性,产生了许多 Java 开源的连接池。例如以下数据库连接池:Jakarta DBCP、C3P0、Proxool、DBPool 等。

       其中,Jakarta DBCP 具体是:一个依赖 Jakarta commons-pool 对象池的数据库连接池,DBCP 可以直接第在应用程序中使用。这也是本文所要介绍的技术要点。

       C3P0 具体是:一个开放源代码的 JDBC 连接池,它在 lib 目录中与 Hibernate 一起发布,包括了实现 jdbc3 和 jdbc2 扩展规范说明的 Connection 池和 Statement 池的 DataSources 对象。

       此处就简单说明一下一上两个连接池,其他连接池此处就不说明了 (⊙o⊙) 哦。

 

2、DBCP 连接池基础简介

      DBCP 是 Java 开源连接池中最常用的一种,它一般应用在数据库使用非常频繁的系统中,可以处理数据库连接的大量请求,是做大型站点的首选数据库配置。

      在 DBCP 创建的过程中,它也遵循普通连接池的创建机制。例如使用 Struts 框架开发时,如果在 struts-config.xml 中配置了 DBCP 组件,则在 Struts 启动时就会创建 DBCP 连接池。

 

3、Struts 框架中配置 DBCP 连接池示例

      以下是使用 Struts 框架时,其中 struts-config.xml 文件中配置 DBCP 组件的示例代码:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" 
"http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<!-- 配置数据源 -->
<data-sources>
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName"
value
="com.mysql.jdbc.Driver" />
<set-property property="url"
value
="jdbc:mysql://localhost:3306/demo" />
<set-property property="username" value="root" />
<set-property property="password" value="" />
<set-property property="maxActive" value="10" />
<set-property property="maxWait" value="5000" />
<set-property property="defaultAutoCommit" value="false" />
<set-property property="defaultReadOnly" value="false" />
<set-property property="validationQuery"
value
="SELECT COUNT(*) FROM user" />
</data-source>
</data-sources>

</struts-config>