![轻量级Java EE企业应用开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/980/44509980/b_44509980.jpg)
5.7 实战:使用数据库连接池DBCP
DBCP(DataBase Connection Pool,数据库连接池)是流行的数据库连接池工具,是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。目前,DBCP新版本为2.x,基于DBCP我们可以方便地实现数据库连接的重用。
本节将演示如何基于DBCP来实现数据库连接池。我们创建了一个名为hello-dbcp的Maven项目作为案例。
5.7.1 添加DBCP依赖
要使用DBCP,需要在pom.xml文件中添加DBCP依赖,配置如下:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P139_78867.jpg?sign=1739113289-rq2EGKu8yZPMWpZVadtUVyH8mp3gG9Kh-0-ddb3cac59dac7d0bac266648c6ef462d)
完整的pom.xml文件内容如下:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P140_78868.jpg?sign=1739113289-UXhxibiSdbgjmv3PKJrirGoOxCK2YZ3l-0-a570262cdb63965fd3245b2ddc80f0cd)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P141_78869.jpg?sign=1739113289-vhlzx5NDu0ng2U7AHlcBSOHGBy3wuqeB-0-1e2fe4d48ae033226499cc26bda19c6f)
5.7.2 编写数据库工具类
为了简化数据的连接操作,编写了基于DBCP的数据库工具类,代码如下:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P141_78870.jpg?sign=1739113289-vKxgyeIUb1S7UwxPFinrhE36mxGPyvpx-0-484176a2ce4e74b5abe36bce1f7ad9c3)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P142_78871.jpg?sign=1739113289-1k9dRF8DnSxyGG9nC1GppFxDZRe2KRzN-0-1847b6ae722a3556beebb0fedde4854b)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P143_78872.jpg?sign=1739113289-7EXfzEdJ02EnB4CJc0e0WZMOZPbuqvrL-0-30b746e10cc5ff7e231df4b0a8577b4c)
其中,setupDataSource方法用于初始化DBCP数据源,方法参数是连接URI及连接属性。该数据源由DBCP框架实现,可以实现连接池的管理。连接属性是由lite.properties文件中加载进来的。
当我们执行getConnection()方法时,连接是从连接池获取的,而非实时创建的,因此可以实现连接的重用。
同理,当我们执行releaseResourcesn()方法时,其中的connection.close()并非真正地关闭连接,而是将连接放回了连接池。
5.7.3 理解DbUtil的配置化
下面来看DbUtil的初始化:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P144_78873.jpg?sign=1739113289-JTJufilCxBCHvoc0Dn2QvsLZlwviqvuV-0-4013cf86ebdbbbbfed40e37dffa38b91)
在上述方法中,将lite.properties文件中的内容转成Java的配置类Properties对象。也就是说,创建数据源时常用的配置都可以放置在lite.properties文件中。
lite.properties文件处于Maven应用的resources目录下,内容如下:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P144_78874.jpg?sign=1739113289-QBXRTACx7HCdmN96jnNvWX4z9xTCM7UG-0-1d6ace605457916e5c6ebd61582cdd7a)
上述4个参数是建立JDBC连接的基本参数,最终会传递给setupDataSource方法。
5.7.4 编写测试用例
测试用例代码如下:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P144_78875.jpg?sign=1739113289-yF19T2dv5bbCQ1cwL0TwgMNPZ8nvqMT2-0-e1a3cd20a3bb8bd62388ea7f89a345de)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P145_78876.jpg?sign=1739113289-auA4UZZ6Eyvs6QKxASShwS3MYOcVBMpZ-0-419338917cdd0bbaa5068daf6d6f6a4a)
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P146_78877.jpg?sign=1739113289-8XKNrwuBB71JofSe9dt2bWxN50ROcup5-0-c11c73e91f351ab0d6b5cacc36bc4857)
DbUtilTest.java的代码与hello-jdbc项目的JdbcTest.java的代码非常类似。唯一的区别是,数据库连接是从DbUtil.getConnection()获取的,而释放资源的方法则是调用的DbUtil.releaseResources()方法。
使用以下命令执行测试:
mvn test
运行测试用例,若看到控制台输出如下内容,则说明测试成功:
![](https://epubservercos.yuewen.com/A99FE4/23721413109387006/epubprivate/OEBPS/Images/Figure-P147_78878.jpg?sign=1739113289-IdarHvkfBHxJviZNmJeQsDVLJFrKrW7z-0-c2c05537d32ed70d948fb0e42062b075)