• Spring整合Hibernate_数据源Datasource_dbcp连接池


    1,  Spring指定 datasource

    DataSource接口,在javax.sql包,里边有一个getConnection()方法。提供了标准化的取得连接的方式。只要实现了这个接口。Sun这个土鳖定的。

       a)         参考文档,找dbcp.BasicDataSource  (dbcp:database connection pool数据库连接池)

        i.  c3p0

        ii.     dbcp

        iii.    proxool

      b)        在DAO或者Service中注入dataSource

      c)         在Spring中可以使用PropertyPlaceHolderConfigure来读取properties文件的内容

    在beans.xml配置里写:

     <!-- DataSource去哪里读取连接池配置 -->
           
           <bean         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                <property name="locations">
                <!-- 在src根目录下建jdbc.properties配置文件 -->
                <value>classpath:jdbc.properties</value>
                    </property>
            </bean>                    

    DataSource:注意这里使用dbcp,使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar

     <!-- dbcp連接池 ,根据上边的配置去配置文件去读取配置-->
            <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
                  <property name="driverClassName" value="${jdbc.driverClassName}" />
                  <property name="url" value="${jdbc.url}" />
                  <property name="username" value="${jdbc.username}" />
                  <property name="password" value="${jdbc.password}" />
                  <property name="initialSize" value="5"/>
                  <property name="maxActive" value="20"/>
            </bean>

    在src根目录建jdbc.properties配置,名称和DataSource里要一致:

    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/spring
    jdbc.username=root
    jdbc.password=root

    将DataSource数据源注入到DAO:

    <bean id="userDAO" class="com.oracle.dao.impl.UserDAOImpl">
                <property name="dataSource" ref="dataSource"></property>
            </bean>

    dbcp连接池配置:

      <!-- 连接池启动时的初始值 -->
      <property name="initialSize" value="10" />
      <!-- 连接池的最大值 -->
      <property name="maxActive" value="100" />
      <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
      <property name="maxIdle" value="50" />
      <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
      <property name="minIdle" value="10" />
      <!--#给出一条简单的sql语句进行验证-->
      <property name="validationQuery" value="select getdate()" />
      <!--#在取出连接时进行有效验证-->
      <property name="testOnBorrow" value="true" />
      <property name="removeAbandonedTimeout" value="120" />
      <property name="removeAbandoned" value="true" />
      <!-- #运行判断连接超时任务的时间间隔,单位为毫秒,默认为-1,即不执行任务。 -->
      <property name="timeBetweenEvictionRunsMillis" value="3600000" />
      <!-- #连接的超时时间,默认为半小时。 -->
      <property name="minEvictableIdleTimeMillis" value="3600000" />  
     </bean>

    ( 以下内容摘在springside):
    DBCP的性能配置主要是4个参数
    #连接池启动时的初始值.
    dbcp.initialSize=10 
    #连接池的最大值.
    dbcp.maxActive=50 
    #最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止。
    dbcp.maxIdle=20 
    #最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请。
    dbcp.minIdle=5 
    一般这几个参数应该放在applicationContext.properties里方便部署时快速修改。
    有两种配置风格,
      比如较少使用者的管理界面,平时的使用者不多,但瞬时可能会有较多的使用者,如Mini-Web,会设置一个较低的maxIdle 而设置较高的maxActive。 
      比如长期高负荷运行的业务系统,会设置一个合理的maxIdle值,且maxActive==maxIdle 
    长期idle连接的处理:
    Mysql服务端会断开超过8小时的空闲连接,如果系统只在白天工作时间被使用,DBCP的连接就很容易被断开的连接,而且DBCP对jdbc url里设置autoReconnect=true是无效。
    更好的做法DBCP主动断开超时的连接。
    #运行判断连接超时任务的时间间隔,单位为毫秒,默认为-1,即不执行任务。
    timeBetweenEvictionRunsMillis=3600000
    #连接的超时时间,默认为半小时。
    minEvictableIdleTimeMillis=3600000
    经测试,按上面的设置,DBCP会在连接idle两小时后将其断开。

  • 相关阅读:
    SQL 语句优化中间表的使用优化
    SQL 语句优化OR 语句优化案例
    浅谈系统优化设计复杂运算放在逻辑层还是在数据库层?
    linux命令综合
    MySQL常用命令
    PHP知识点积累
    [Git] 生成token解决github remote: Support for password authentication was removed on August 13, 2021.
    [uniapp] GOFLY在线客服系统 uniapp增加播放背景音效或者按钮音效
    [Golang]gorm更新数据update 解决值为0时被忽略
    光阴真的是贱(似箭),一不小心就又过一年了
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/4875906.html
Copyright © 2020-2023  润新知