JDBC连接池框架
在企业级数据库应用中,数据库连接池(Connection Pool)是一个非常重要的组件。连接池的主要功能是管理和控制JDBC中的几类资源(Connection,Statement,ResultSet),以提供高性能的数据库访问,同时防止这几类资源的无限制使用而导致性能降低甚至服务崩溃。连接池一般有最大连接数,最小连接数,最大并发连接数等属性。在JDBC3.0提出连接池框架之前,一些应用服务器和数据库厂商都提供了自己的连接池组件,客户在使用不同的连接池服务时可能要进行不同的配置。JDBC3.0规范定义了标准连接池的框架和若干标准属性。
JDBC连接池API
PooledConnection 表示对数据源的一个物理连接,它由ConnectionPoolDataSource管理而可以重复利用。与之相对,我们日常使用的Connection称之为逻辑连接。
ConnectionPoolDataSource 连接池数据源,管理PooledConnection的工厂。
ConnectionEvent 当一个PooledConnection连接关闭时,或者发生错误时生成的事件。
ConnectionEventListener ConnectionEvent事件监听器。
以上API是面向应用服务器和JDBC驱动厂商的,除非是要实现自己的连接池,一般使用JDBC的应用程序不会也不应该和这些接口打交道,照样还是面对标准的DataSource,Connection等接口。当我们的应用程序调用DataSource的getConnection()方法取得Connection时,实际是从连接池中得到一个PoolConnection的句柄,实际PoolConnection可能就是连接池中已经存在的,也可能是新创建的,应用程序不会知道。当调用Connection的close()方法时,只是逻辑连接的关闭,实际PoolConnection返还到池中供重复利用。
开源连接池实现
目前有众多的开源连接池实现,它们大多数是比较独立的组件,经过一定的配置就可以在我们的应用中使用。下面是三个用得比较多的连接池:
DBCP 它是Tomcat中已经自带的数据库连接池。
C3P0 它是随着hibernate一起发展起来的数据库连接池。
Proxool 它是一个Java SQL Driver驱动程序,提供了各种JDBC驱动的连接池封装。
上面的几种连接池的配置方法大同小异,各有所长,可以根据具体的应用和各种评测数据进行选择。