数据库连接池

数据库连接池技术主要是为了提高数据库操作的性能,它允许应用程序重复使用一个现有的数据库连接,而非重新再建立一个


原理:系统初始化时将数据库连接作为对象存储在内存中,同时可以作些配置,当用户访问数据库时,从连接池中取出一个空闲的连接对象,用完后放会池中,可以重复利用


常用的相关的配置参数:

初始连接数:连接池初始化的连接数

最小连接数:是连接池一直保持的数据库连接数

最大连接数:连接池能申请的最大连接数,超过了就只能等待

每次增加的容量:连接池中的连接耗尽时每次增加的连接数


配置需要注意的地方:

最小连接数:如果应用程序使用的连接并不多,可能造成大量连接的浪费

最大连接数:超过最大连接后,导致连接请求进入队列等待,影响数据库的操作

最小和最大连接数相差过大:在连接请求没有超过最小连接数时用的都是现成的,所以比较快,而超过了之后,以后的连接请求需要重新申请连接,用完后放入连接池重复使用或者空间超时后被释放


java中经常使用的数据库连接产品:DBCP,C3P0,Proxool等


java中开源框架对数据库连接产品的集成情况:Hibernate使用c3p0,Spring使用dbcp,不过三种产品都能很好的整合到SpringFramework中

这里的配置我没有重新写而是借鉴网上的,有兴趣可以看看http://qrqzhujinyi.iteye.com/blog/698279

以下就是三种产品整合到Spring中的配置:

dbcp:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    <property name="driverClassName" value="${db.driverClassName}"/>  
    <property name="url" value="${db.url}"/>  
    <property name="username" value="${db.username}"/>  
    <property name="password" value="${db.password}"/>  
    <!--initialSize: 初始化连接-->  
    <property name="initialSize" value="5"/>  
    <!--maxIdle: 最大空闲连接-->  
    <property name="maxIdle" value="10"/>  
    <!--minIdle: 最小空闲连接-->  
    <property name="minIdle" value="5"/>  
    <!--maxActive: 最大连接数量-->  
    <property name="maxActive" value="15"/>  
    <!--removeAbandoned: 是否自动回收超时连接-->  
    <property name="removeAbandoned" value="true"/>  
    <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
    <property name="removeAbandonedTimeout" value="180"/>  
    <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->  
    <property name="maxWait" value="3000"/>  
    <property name="validationQuery">  
    <value>SELECT 1</value>  
    </property>  
    <property name="testOnBorrow">  
    <value>true</value>  
    </property>  
    </bean>  

c3p0:

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
      <property name="driverClass" value="${db.driverClassName}"/>  
      <property name="jdbcUrl" value="${db.url}"/>  
    <!--  
      <property name="user" value="${db.user}"/>  
      <property name="password" value="${db.pass}"/>  
    -->  
      <property name="properties">  
        <props>  
          <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3-->  
          <prop key="c3p0.acquire_increment">5</prop>  
          <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->   
          <prop key="c3p0.idle_test_period">60</prop>  
          <prop key="c3p0.max_size">15</prop>  
          <prop key="c3p0.max_statements">0</prop>  
          <prop key="c3p0.min_size">10</prop>  
          <prop key="user">${db.user}</prop>  
          <prop key="password">${db.pass}</prop>  
        </props>  
      </property>  
    </bean>  

proxool:

    <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">  
      <property name="driver" value="${db.driverClassName}"/>  
      <property name="driverUrl" value="${db.url}"/>  
     <!--用户名和密码写在一起才调用成功,不然会报 调用无效的参数 错误,下面设置用户名和密码的property好像是无效的,其它数据库也是这样  
     比如mysql的也要把用户名和密码写在url里:<property name="driverUrl" value="jdbc:mysql://localhost:3306/blogdb?user=lizongbo&password=lizongbo" />  
     -->  
      <property name="user" value="${db.user}"/>  
      <property name="password" value="${db.pass}"/>  
      <property name="alias" value="${db.alias}"/>  
      <property name="houseKeepingSleepTime" value="90000"/>  
      <property name="prototypeCount" value="5"/>  
      <property name="maximumConnectionCount" value="100"/>  
      <property name="minimumConnectionCount" value="10"/>  
      <property name="trace" value="true"/>  
      <property name="verbose" value="true"/>  
    </bean>  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值