
在深入了解连接池之前,我们先要理解几个基本概念:数据源(Data source)指的是数据的来源,即系统读取数据的具体位置;JDBC(Java Database Connectivity)是一种标准的面向对象的应用程序接口,用于访问关系数据库。
数据源并不等同于连接池,连接池是数据源的一种实现方式,但并非所有数据源都需要实现连接池功能。例如,c3p0就是一种连接池实现,其配置方式在hibernate.cfg.xml中体现,如下所示:
hibernate.cfg.xml配置:
<property name="connection.provider_class">com.mchange.v2.c3p0.ComboPooledDataSource</property>
<property name="hibernate.c3p0.min_size">20</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
dbcp也是一种连接池,其配置方式也类似c3p0,具体如下:
hibernate.cfg.xml配置:
<property name="connection.provider_class">org.apache.commons.dbcp.BasicDataSourceFactory</property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/DBCP</property>
proxool是另一种连接池实现,配置文件proxool.xml通常与hibernate.cfg.xml位于同一目录下,具体配置如下:
proxool.xml配置:
<pool-name>DBPool</pool-name>
<driver>com.mysql.jdbc.Driver</driver>
<factory-class>org.proxool.factory.ProxoolFactory</factory-class>
<property name="driver-url">jdbc:mysql://localhost:3306/application_context?useUnicode=true&characterEncoding=UTF8</property>
<property name="max-connections">100</property>
<property name="min-connections">10</property>
在实际应用中,hibernate 3.0版本已经不再支持dbcp,因为作者发现dbcp在某些情况下会产生许多无法释放的空连接,因此不再推荐使用。相比之下,proxool虽然被一些专家推荐,但其占用资源较多且效率不高。因此,c3p0成为了当前较为推荐的连接池解决方案。