posts - 495,comments - 227,trackbacks - 0

          tomcatde DHCP的配置
          <Resource driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
          logAbandoned="true" maxActive="20" maxIdle="2" maxWait="5000" name="system"
          removeAbandonedTimeout="60" removeAbandoned="true"
          password="xx" type="javax.sql.DataSource"
          url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=base"
          username="sa"/>
          當(dāng)中的
          logAbandoned="true"  removeAbandoned="true" removeAbandonedTimeout="60"
          就是用來配置數(shù)據(jù)庫斷開后自動(dòng)連接的。


          數(shù)據(jù)庫連接池會(huì)在啟動(dòng)時(shí)就建立所需的若干連接,并一直保持連接狀態(tài),
          但是當(dāng)數(shù)據(jù)庫服務(wù)停止后,這些連接就被外部因素給中斷了
          網(wǎng)上優(yōu)化了的配置信息:
          <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: 最大連接數(shù)量--> 
          <property name="maxActive" value="15"/> 
          <!--removeAbandoned: 是否自動(dòng)回收超時(shí)連接--> 
          <property name="removeAbandoned" value="true"/> 
          <!--removeAbandonedTimeout: 超時(shí)時(shí)間(以秒數(shù)為單位)--> 
          <property name="removeAbandonedTimeout" value="180"/> 
          <!--maxWait: 超時(shí)等待時(shí)間以毫秒為單位 6000毫秒/1000等于60秒--> 
          <property name="maxWait" value="3000"/> 
          <property name="validationQuery"> 
          <value>SELECT 1</value> 
          </property> 
          <property name="testOnBorrow"> 
          <value>true</value> 
          </property> 
          </bean>  

          dbcp配置中文版本,自apache 官方文檔
          原文請(qǐng)見http://commons.apache.org/dbcp/configuration.html。

          參數(shù)  描述
          username  傳遞給JDBC驅(qū)動(dòng)的用于建立連接的用戶名
          password  傳遞給JDBC驅(qū)動(dòng)的用于建立連接的密碼
          url  傳遞給JDBC驅(qū)動(dòng)的用于建立連接的URL
          driverClassName  使用的JDBC驅(qū)動(dòng)的完整有效的java 類名
          connectionProperties  當(dāng)建立新連接時(shí)被發(fā)送給JDBC驅(qū)動(dòng)的連接參數(shù),
          格式必須是 [propertyName=property;]*
          注意 :參數(shù)user/password將被明確傳遞,所以不需要包括在這里。

          參數(shù)  默認(rèn)值  描述
          defaultAutoCommit  true  連接池創(chuàng)建的連接的默認(rèn)的auto-commit狀態(tài)
          defaultReadOnly  driver default  連接池創(chuàng)建的連接的默認(rèn)的read-only狀態(tài).
          如果沒有設(shè)置則setReadOnly方法將不會(huì)被調(diào)用. (某些驅(qū)動(dòng)不支持只讀模式,比如:Informix)
          defaultTransactionIsolation  driver default  連接池創(chuàng)建的連接的默認(rèn)的TransactionIsolation狀態(tài).
          下面列表當(dāng)中的某一個(gè): (參考javadoc)

              * NONE
              * READ_COMMITTED
              * READ_UNCOMMITTED
              * REPEATABLE_READ
              * SERIALIZABLE

          defaultCatalog   連接池創(chuàng)建的連接的默認(rèn)的catalog

          參數(shù)  默認(rèn)值  描述
          initialSize  0  初始化連接:連接池啟動(dòng)時(shí)創(chuàng)建的初始化連接數(shù)量,1.2版本后支持
          maxActive  8  最大活動(dòng)連接:連接池在同一時(shí)間能夠分配的最大活動(dòng)連接的數(shù)量,
          如果設(shè)置為非正數(shù)則表示不限制
          maxIdle  8  最大空閑連接:連接池中容許保持空閑狀態(tài)的最大連接數(shù)量,超過的空閑連接將被釋放,
          如果設(shè)置為負(fù)數(shù)表示不限制
          minIdle  0  最小空閑連接:連接池中容許保持空閑狀態(tài)的最小連接數(shù)量,低于這個(gè)數(shù)量將創(chuàng)建新的連接,
          如果設(shè)置為0則不創(chuàng)建
          maxWait  無限  最大等待時(shí)間:當(dāng)沒有可用連接時(shí),連接池等待連接被歸還的最大時(shí)間(以毫秒計(jì)數(shù)),
          超過時(shí)間則拋出異常,如果設(shè)置為-1表示無限等待

          參數(shù)  默認(rèn)值  描述
          validationQuery   SQL查詢,用來驗(yàn)證從連接池取出的連接,在將連接返回給調(diào)用者之前.如果指定,
          則查詢必須是一個(gè)SQL SELECT并且必須返回至少一行記錄
          testOnBorrow  true  指明是否在從池中取出連接前進(jìn)行檢驗(yàn),如果檢驗(yàn)失敗,
          則從池中去除連接并嘗試取出另一個(gè).
          注意: 設(shè)置為true后如果要生效,validationQuery參數(shù)必須設(shè)置為非空字符串
          testOnReturn  false  指明是否在歸還到池中前進(jìn)行檢驗(yàn)
          注意: 設(shè)置為true后如果要生效,validationQuery參數(shù)必須設(shè)置為非空字符串
          testWhileIdle  false  指明連接是否被空閑連接回收器(如果有)進(jìn)行檢驗(yàn).如果檢測失敗,
          則連接將被從池中去除.
          注意: 設(shè)置為true后如果要生效,validationQuery參數(shù)必須設(shè)置為非空字符串
          timeBetweenEvictionRunsMillis  -1  在空閑連接回收器線程運(yùn)行期間休眠的時(shí)間值,以毫秒為單位.
           如果設(shè)置為非正數(shù),則不運(yùn)行空閑連接回收器線程
          numTestsPerEvictionRun  3  在每次空閑連接回收器線程(如果有)運(yùn)行時(shí)檢查的連接數(shù)量
          minEvictableIdleTimeMillis  1000 * 60 * 30  連接在池中保持空閑而不被空閑連接回收器線程
          (如果有)回收的最小時(shí)間值,單位毫秒

          參數(shù)  默認(rèn)值  描述
          poolPreparedStatements  false  開啟池的prepared statement 池功能
          maxOpenPreparedStatements  不限制  statement池能夠同時(shí)分配的打開的statements的最大數(shù)量,
          如果設(shè)置為0表示不限制


          這里可以開啟PreparedStatements池. 當(dāng)開啟時(shí), 將為每個(gè)連接創(chuàng)建一個(gè)statement池,
          并且被下面方法創(chuàng)建的PreparedStatements將被緩存起來:
              * public PreparedStatement prepareStatement(String sql)
              * public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
          注意: 確認(rèn)連接還有剩余資源可以留給其他statement
          參數(shù)  默認(rèn)值  描述
          accessToUnderlyingConnectionAllowed  false  控制PoolGuard是否容許獲取底層連接


          如果容許則可以使用下面的方式來獲取底層連接:
              Connection conn = ds.getConnection();
              Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
              ...
              conn.close();

          默認(rèn)false不開啟, 這是一個(gè)有潛在危險(xiǎn)的功能, 不適當(dāng)?shù)木幋a會(huì)造成傷害.
          (關(guān)閉底層連接或者在守護(hù)連接已經(jīng)關(guān)閉的情況下繼續(xù)使用它).請(qǐng)謹(jǐn)慎使用,
          并且僅當(dāng)需要直接訪問驅(qū)動(dòng)的特定功能時(shí)使用.
          注意: 不要關(guān)閉底層連接, 只能關(guān)閉前面的那個(gè).
          參數(shù)  默認(rèn)值  描述
          removeAbandoned  false  標(biāo)記是否刪除泄露的連接,如果他們超過了removeAbandonedTimout的限制.
          如果設(shè)置為true, 連接被認(rèn)為是被泄露并且可以被刪除,如果空閑時(shí)間超過removeAbandonedTimeout.
          設(shè)置為true可以為寫法糟糕的沒有關(guān)閉連接的程序修復(fù)數(shù)據(jù)庫連接.
          removeAbandonedTimeout  300  泄露的連接可以被刪除的超時(shí)值, 單位秒
          logAbandoned  false  標(biāo)記當(dāng)Statement或連接被泄露時(shí)是否打印程序的stack traces日志。
          被泄露的Statements和連接的日志添加在每個(gè)連接打開或者生成新的Statement,
          因?yàn)樾枰蓅tack trace。


          如果開啟"removeAbandoned",那么連接在被認(rèn)為泄露時(shí)可能被池回收. 這個(gè)機(jī)制在(getNumIdle() < 2)
           and (getNumActive() > getMaxActive() - 3)時(shí)被觸發(fā).
          舉例當(dāng)maxActive=20, 活動(dòng)連接為18,空閑連接為1時(shí)可以觸發(fā)"removeAbandoned".
          但是活動(dòng)連接只有在沒有被使用的時(shí)間超過"removeAbandonedTimeout"時(shí)才被刪除,默認(rèn)300秒.
          在resultset中游歷不被計(jì)算為被使用.

          posted on 2011-04-14 10:58 SIMONE 閱讀(17701) 評(píng)論(0)  編輯  收藏 所屬分類: JSP
          主站蜘蛛池模板: 富顺县| 新郑市| 易门县| 屯昌县| 兰坪| 壤塘县| 蒙城县| 黄石市| 望谟县| 兴安盟| 星子县| 鸡西市| 张家界市| 宁远县| 沾化县| 桐柏县| 杨浦区| 阿拉善右旗| 安乡县| 交口县| 青海省| 南充市| 新巴尔虎左旗| 龙陵县| 海城市| 报价| 项城市| 甘孜| 乃东县| 科技| 浦北县| 榆社县| 金堂县| 读书| 法库县| 西丰县| 勃利县| 崇左市| 钦州市| 上饶市| 天等县|