<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tinguo002

     

    java.net.SocketException: Connection reset 解決方法

    推薦好文:http://www.cnblogs.com/zmc/p/3295761.html

    當數據庫連接池中的連接被創建而長時間不使用的情況下,該連接會自動回收并失效,但客戶端并不知道,在進行數據庫操作時仍然使用的是無效的數據庫連接,這樣,就導致客戶端程序報“ java.sql.SQLException: Io 異常: Connection reset” 或“java.sql.SQLException 關閉的連接”異常。


    解決辦法:客戶端在使用一個無效的連接時會先對該連接進行測試,如果發現該連接已經無效,則重新從連接池獲取有效數據庫連接來使用。

    在tomcat的context.xml里面設置數據源時候可參考:

     <Resource auth="Container"
      driverClassName="oracle.jdbc.OracleDriver"
      type="javax.sql.DataSource"
      url="jdbc:oracle:thin:@11.11.11.45:1521:orcl"
      name="jdbc/login"
      username="login"
      password="login"
      maxActive="15"
      maxIdle="10"
      maxWait="-1"
      minIdle="2"
      removeAbandonedTimeout="5"
      testOnBorrow="true"
      testWhileIdle="true"
      testOnReturn="true"
      removeAbandoned="true"
      logAbandoned="true"
      validationQuery="select 1 from dual"
     /> 
     
     
    參考:http://www.cnblogs.com/younes/archive/2012/06/01/2529483.html




    DBCP數據庫連接失效的解決方法(Io 異常:Connection reset)


    網上很多評論說DBCP有很多BUG,但是都沒有指明是什么BUG,只有一部分人說數據庫如果因為某種原因斷掉后再DBCP取道的連接都是失效的連接,而沒有重新取。有的時候會報Io 異常:Connection reset。

    解決方法:

    spring中datasource的配置如下:
        <bean id="dispatchdataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:myserver" />
        <property name="username" value="user1" />
        <property name="password" value="pwd" />
        <property name="maxActive" value="10000" />
        <property name="maxIdle" value="30" />
         <property name="minIdle" value="2" />
        <property name="maxWait" value="600000" />
        <property name="testOnBorrow" value="true"/>
        <property name="testWhileIdle" value="true"/>
        <property name="validationQuery" value="select 1 from dual"/>
    </bean>

     

    分析:

    DBCP使用apache的對象池ObjectPool作為連接池的實現,有以下主要的方法

    Object borrowObject() throws Exception;從對象池取得一個有效對象

    void returnObject(Object obj) throws Exception;使用完的對象放回對象池

    void invalidateObject(Object obj) throws Exception;使對象失效

    void addObject() throws Exception;生成一個新對象


    ObjectPool的一個實現就是GenericObjectPool,這個類使用對象工廠PoolableObjectFactory實現對象的生成,失效檢查等等功能,以其實現數據庫連接工廠PoolableConnectionFactory做以說明,主要方法:

         Object makeObject() throws Exception; 使用ConnectionFactory生成新連接

         void destroyObject(Object obj) throws Exception;關閉連接

         boolean validateObject(Object obj); 驗證連接是否有效,如果_validationQuery不空,則使用該屬性作為驗證連接是否有效的sql語句,查詢數據庫

         void activateObject(Object obj) throws Exception;激活連接對象

         void passivateObject(Object obj) throws Exception; 關閉連接生成過的Statement和ResultSet,使連接處于非活動狀態

        而GenericObjectPool有幾個主要屬性

         _timeBetweenEvictionRunsMillis:失效檢查線程運行時間間隔,默認-1

         _maxIdle:對象池中對象最大個數

         _minIdle:對象池中對象最小個數

         _maxActive:可以從對象池中取出的對象最大個數,為0則表示沒有限制,默認為8

         在構造GenericObjectPool時,會生成一個內嵌類Evictor,實現自Runnable接口。如果 _timeBetweenEvictionRunsMillis大于0,每過_timeBetweenEvictionRunsMillis毫秒 Evictor會調用evict()方法,檢查對象的閑置時間是否大于 _minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0時則忽略,默認為30 分鐘),是則銷毀此對象,否則就激活并校驗對象,然后調用ensureMinIdle方法檢查確保池中對象個數不小于_minIdle。在調用 returnObject方法把對象放回對象池,首先檢查該對象是否有效,然后調用PoolableObjectFactory 的passivateObject方法使對象處于非活動狀態。再檢查對象池中對象個數是否小于_maxIdle,是則可以把此對象放回對象池,否則銷毀此對象。

         還有幾個很重要的屬性,_testOnBorrow、_testOnReturn、_testWhileIdle,這些屬性的意義是取得、返回對象和空閑時是否進行驗證,檢查對象是否有效,默認都為false即不驗證。所以當使用DBCP時,數據庫連接因為某種原因斷掉后,再從連接池中取得連接又不進行驗證,這時取得的連接實際已經時無效的數據庫連接了。網上很多說 DBCP的bug應該都是如此吧,只有把這些屬性設為true,再提供_validationQuery語句就可以保證數據庫連接始終有效了,oracle數據庫可以使用SELECT COUNT(*) FROM DUAL,不過DBCP要求_validationQuery語句查詢的記錄集必須不為空,可能這也可以算一個小小的BUG,其實只要_validationQuery語句執行通過就可以了。

    參考:http://hi.baidu.com/dobodo/item/7d95e3384d181cc4392ffab5



    Tomcat Resource可配置的屬性






    歡迎大家訪問我的個人網站 萌萌的IT人

    posted on 2014-06-27 11:43 一堣而安 閱讀(14941) 評論(0)  編輯  收藏 所屬分類: java 、tomcat

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲五月综合缴情在线观看| 成人免费无码大片a毛片软件| 国产精品亚洲玖玖玖在线观看| 亚洲AV无码XXX麻豆艾秋| 女人18毛片特级一级免费视频 | 欧洲美熟女乱又伦免费视频| 亚洲1234区乱码| 午夜私人影院免费体验区| 亚洲熟妇AV乱码在线观看| 免费看www视频| 欧美亚洲国产SUV| 亚洲国产成人精品91久久久| 成年免费大片黄在线观看com| 在线日韩日本国产亚洲| 国产免费AV片在线观看| 亚洲视频在线观看免费视频| 国产免费丝袜调教视频| 亚洲欧美日韩自偷自拍| 大胆亚洲人体视频| 另类免费视频一区二区在线观看| 亚洲视频在线免费看| 毛片免费vip会员在线看| 另类专区另类专区亚洲| 77777亚洲午夜久久多人| 中文字幕视频免费| 亚洲精品一卡2卡3卡四卡乱码| 亚洲色一色噜一噜噜噜| 一级毛片免费不卡在线| 亚洲熟妇AV一区二区三区浪潮| 亚洲精品视频久久久| 蜜桃成人无码区免费视频网站| 亚洲熟女乱色一区二区三区| 国产亚洲欧洲Aⅴ综合一区| 麻豆视频免费播放| 黄色免费网址在线观看| 亚洲福利电影一区二区?| 四虎影库久免费视频| 午夜免费福利视频| 国产精品亚洲专区一区| 亚洲最大成人网色| 日韩精品成人亚洲专区|