首页 > 代码库 > DBCP与C3P0数据库连接池

DBCP与C3P0数据库连接池

数据库连接池是做什么的?

学过计算机网络的都知道,在一个内部局域网中。大部分用的都是私有地址,要想和外部 打交道,必须要有相应的合法外部地址相相应。然而内部用户数量巨大。一台机子一个外部IP 是不现实的。这样就有了一种叫做连接池的概念。由于不是每个用户都要同一时候上网。当一个 用户须要上网的时候,他就能够从连接池中取得一个外部IP地址,从而对外网进行訪问。

当这 个用户不再须要上网的时候。这一个IP地址被放回连接池中。又能够给其它的用户訪问。这里 的连接池是主要是为了解决IP地址数量问题的。而在数据库中。也有连接池的概念。

我认为这 个连接池主要是通过对连接的复用,从而更加高效的实现了对用户请求的响应。常见的供java 开发的连接池主要有dbcp和c3p0。

c3p0简单介绍:

C3P0是一个开源的JDBC连接池。它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。眼下使用它的开源项目有Hibernate,Spring等。 

dbcp简单介绍:

DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp须要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar因为建立数据库连接是一个很耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序须要建立数据库连接时直接到连接池中申请一个即可,用完后再放回去。 

c3p0与dbcp差别:

dbcp没有自己主动的去回收空暇连接的功能 。

c3p0有自己主动回收空暇连接功能。

dbcp所需jar:commons-dbcp.jar、commons-pool.jar、common-collections.jar
c3p0所需jar:c3p0-0.9.2.1.jar mchange-commons-java-0.2.3.4.jar

applicationContext.xml配置信息例如以下:

<!-- 配置dbcp数据源 -->
      <bean id="dataSource2" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value=http://www.mamicode.com/"${jdbc.driverClassName}"/>>

设置为0时表示无限制。

--> <property name="maxActive" value=http://www.mamicode.com/"30"/>>

--> <property name="maxIdle" value=http://www.mamicode.com/"20"/>>

--> <property name="maxWait" value=http://www.mamicode.com/"100"/> >

Default: 0 --> <property name="maxIdleTime" value=http://www.mamicode.com/"30" />>

Default: 3 --> <property name="acquireIncrement" value=http://www.mamicode.com/"5" />>

假设maxStatements与maxStatementsPerConnection均为0。则缓存被关闭。Default: 0--> <property name="maxStatements" value=http://www.mamicode.com/"0" />>

Default: 0 --> <property name="idleConnectionTestPeriod" value=http://www.mamicode.com/"60" />>

Default: 30 --> <property name="acquireRetryAttempts" value=http://www.mamicode.com/"30" />>

可是数据源仍有效 保留。并在下次调用getConnection()的时候继续尝试获取连接。

假设设为true,那么在尝试 获取连接失败后该数据源将申明已断开并永久关闭。Default: false--> <property name="breakAfterAcquireFailure" value=http://www.mamicode.com/"true" />>

假设设为true那么在每一个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 等方法来提升连接測试的性能。Default: false --> <property name="testConnectionOnCheckout" value=http://www.mamicode.com/"false" /> >

DBCP与C3P0数据库连接池