多语言展示
当前在线:158今日阅读:61今日分享:18

数据库连接池C3P0和BoneCP的使用与对比

池化技术是程序开发领域的一大进步,对于需要频繁创建资源消耗大,初始化复杂的对象,该技术能大大提升程序性能。数据库连接池就是一种池化技术,C3P0 和 BoneCP 是两款常用的开源数据库连接池,本篇经验就介绍一下这两款数据库连接池的使用并进行简单对比。
工具/原料

Eclipse, Maven,C3P0, BoneCP

方法/步骤
1

C3P0连接池的使用,首先引入 C3P0 连接池所依赖的 jar 包,基于 Maven 的工程请添加如下依赖,非 Maven 工程请下载相关 jar 包加入到工程类路径下。          c3p0         c3p0         0.9.1.2 

2

编写配置文件,C3P0 默认配置文件是工程类路径下的 c3p0-config.xml ,你也可以通过设置系统属性 com.mchange.v2.c3p0.cfg.xml 的值来指定具体配置文件的路径信息。图示,配置文件内容及相关配置项的注释信息。

3

C3P0重点配置项解析:1000该配置项的含义是,当连接池连接用完时客户端调用getConnection()后等待获取新连接的时间(单位毫秒),超时后将抛出 SQLException,默认为0,代表无限期等待。对于这种阻塞式的配置项,建议一定设置阻塞等待的超时时间,否则系统会因为某一模块的数据库异常,而导致所有服务线程无限阻塞在获取连接上,进而导致系统服务崩溃。

4

C3P0连接池测试1. 图1示,通过使用C3P0提供的连接池类 ComboPooledDataSource 构建一个获取和关闭数据库连接的工具类2. 图2示,编写测试代码,从上述工具类中获取数据库连接,打印该连接对应的代理类名称,并关闭连接

BoneCP连接池的使用
1

引入 BoneCP 依赖:         com.jolbox         bonecp         0.8.0.RELEASE

2

通过图1示静态代码段的方式配置并初始化 BoneCP 提供的连接池对象,和 C3P0 相似,如下关于获取连接超时的配置非常重要:// 连接超时时间阀值,获取连接时,超出阀值时间,则获取失败 config.setConnectionTimeout(1000, TimeUnit.MILLISECONDS);图2示,通过C3P0提供的数据库连接池类 BoneCP 创建的一个获取数据库连接的工具类。

3

BoneCP连接池测试编写测试代码,从上述工具类中获取数据库连接,打印该连接对应的代理类名称,并关闭连接

4

总结:这两款数据库连接池都是当前应用较为广泛,运行比较稳定的开源连接池组件,从性能基准测试上看,BoneCP 略胜一筹,可针对具体业务场景,涉及相关测试并根据结果进行选择,注意,两个组件均提供了很多可配置的参数,相关值的设置也会对组件性能及稳定性有一定的影响。

推荐信息