数据库连接池

来源:互联网 发布:sql2000怎么导入数据 编辑:程序博客网 时间:2024/04/20 06:37

1、定义
数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。

2、运行机制
(1) 程序初始化时创建连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源

3、开源包
c3p0,dbcp

4、Spring中的连接池
在spring中,常使用数据库连接池来完成对数据库的连接配置,类似于线程池的定义。

数据库连接池,即有一定数量数据库连接的一个缓冲池,一方面,能够即取即用,免去初始化的时间;另一方面,用完的数据连接会归还到连接池中,免去了不必要的连接创建、销毁工作,提升了性能。

常用的连接池有:jdbc,dbcp,c3p0,JNDI。

spring框架推荐使用dbcp,hibernate框架推荐使用c3p0。
经测试发现,c3p0与dbcp相比较,c3p0能够更好的支持高并发,但是在稳定性方面略逊于dpcp。

1、JDBC连接池

<bean id="dataSource"    class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <property name="driverClassName" value="com.mysql.jdbc.Driver">    </property>    <property name="url" value="jdbc:mysql://localhost:3306/yc" />    <property name="username" value="yc"></property>    <property name="password" value="yc"></property></bean>

2、DBCP连接池

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    destroy-method="close"><!--设置为close使Spring容器关闭同时数据源能够正常关闭,以免造成连接泄露  -->    <property name="driverClassName" value="com.mysql.jdbc.Driver" />    <property name="url" value="jdbc:mysql://localhost:3306/yc" />    <property name="username" value="yc" />    <property name="password" value="yc" />    <property name="defaultReadOnly" value="false" /><!-- 设置为只读状态,配置读写分离时,读库可以设置为true -->    <!-- 在连接池创建后,会初始化并维护一定数量的数据库安连接,当请求过多时,数据库会动态增加连接数,    当请求过少时,连接池会减少连接数至一个最小空闲值 -->    <property name="initialSize" value="5" /><!-- 在启动连接池初始创建的数据库连接,默认为0 -->    <property name="maxActive" value="15" /><!-- 设置数据库同一时间的最大活跃连接默认为8,负数表示不闲置 -->    <property name="maxIdle" value="10"/><!-- 在连接池空闲时的最大连接数,超过的会被释放,默认为8,负数表示不闲置 -->    <property name="minIdle" value="2" /><!-- 空闲时的最小连接数,低于这个数量会创建新连接,默认为0 -->    <property name="maxWait" value="10000" /><!-- 连接被用完时等待归还的最大等待时间,单位毫秒,超出时间抛异常,默认为无限等待 --></bean>

3、C3P0连接池

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">        <property name="driverClass" value="com.mysql.jdbc.Driver" />        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/yc" />        <property name="user" value="yc" />        <property name="password" value="yc" /></bean>
原创粉丝点击