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

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

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

    super

    使用 apache common dbcp +common pool+mysql連接無效的問題




    Throwable occurred: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 50,123,505 milliseconds ago.  The last packet sent successfully to the server was 50,123,505 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.


    這主要是由兩個原因引起來的:
    1.mysql 會自動關(guān)閉長時間不用的connection,一個連接如果處于sleep狀態(tài)達(dá)到mysql的參數(shù)wait_timeout指定的時間(默認(rèn)為8小時),就是自動關(guān)閉這個連接
    2.common pool中沒有指定相應(yīng)的連接檢查參數(shù)


    解決辦法:從common pool的配置參數(shù)來解決:

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName">
       <value>${db.driver}</value>
      </property>
      <property name="url">
       <value>${db.url}</value>
      </property>
      <property name="username">
       <value>${db.user}</value>
      </property>
      <property name="password">
       <value>${db.password}</value>
      </property>
      <property name="maxActive">
       <value>100</value>
      </property>
      <property name="maxIdle">
       <value>50</value>
      </property>
      <property name="maxWait">
       <value>10000</value>
      </property>


      <property name="timeBetweenEvictionRunsMillis">
       <value>3600000</value><!--1 hours-->
      </property>

    <!--
      <property name="minEvictableIdleTimeMillis">
       <value>20000</value>
      </property>
    -->
      
      <property name="testWhileIdle">
       <value>true</value>
      </property>
      <property name="validationQuery">
       <value>select 1 from dual</value>
      </property>

     </bean>

    使用上述的三個紅色的參數(shù),就可以避免這個問題.這三個參數(shù)的意義:

    timeBetweenEvictionRunsMillis:啟動connection校驗定時器,定時器運行時間間隔就是timeBetweenEvictionRunsMillis的值.默認(rèn)為-1,表示不啟動定時器,這里設(shè)定為1小時,只要小于mysql的wait_timeout就可以了

    testWhileIdle: true,表示檢查idle的connection,false為不檢查

    validationQuery:用于檢查connection的sql語句.


    這只是一種方法,另外的幾種方法:

    timeBetweenEvictionRunsMillis+minEvictableIdleTimeMillis:這種方式不檢查Connection的有效性,而是檢查連接的空閑時間,大于minEvictableIdleTimeMillis就清除.

      <property name="timeBetweenEvictionRunsMillis">
       <value>3600000</value><!--1 hours-->
      </property>

      <property name="minEvictableIdleTimeMillis">
       <value>120000</value><!--connection的空閑時間大于這個值,就直接被關(guān)閉,并從連接池中刪除-->
      </property>


    如果不喜歡用定時器,也可以配置testOnBorrow+validationQuery參數(shù):每次從連接池取參數(shù)都會校驗連接的有效性.實際上這種方式性能會比定時器差些.
      <property name="testOnBorrow">
       <value>true</value>
      </property>
      <property name="validationQuery">
       <value>select 1 from dual</value>
      </property>


    另外,也可以用testOnReturn+validationQuery,不過未必會解決問題:這表示每次使用完連接,歸還連接池的時候檢查連接的有效性,這有可能導(dǎo)致使用一次無效的連接,最好不要用.


    上面的幾種方法可以合并使用,只是檢查的點多了,未必是好事


    另外,也可以使用Abandoned的那幾個參數(shù),來刪除連接池中的連接.也能達(dá)到效果.我沒測試.











    posted on 2010-09-15 17:57 王衛(wèi)華 閱讀(2439) 評論(0)  編輯  收藏 所屬分類: spring


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费高清av一区二区三区| 久久精品国产免费观看| 成年女人永久免费观看片| 亚洲AV一二三区成人影片| 亚洲美女免费视频| 亚洲国产成人手机在线电影bd| 久久久久久久岛国免费播放| 亚洲高清在线视频| 91精品免费观看| 亚洲av一本岛在线播放| 女人毛片a级大学毛片免费| 人人狠狠综合久久亚洲| 亚洲精品国产综合久久一线| a毛片成人免费全部播放| 国产l精品国产亚洲区在线观看| 久久久久国产精品免费网站| 亚洲综合色一区二区三区小说| 97人伦色伦成人免费视频| 丰满亚洲大尺度无码无码专线| 波多野结衣免费视频观看| 本免费AV无码专区一区| 亚洲国产精品婷婷久久| 免费观看黄网站在线播放| 日日摸日日碰夜夜爽亚洲| 亚洲开心婷婷中文字幕| 美女内射毛片在线看免费人动物| 亚洲娇小性色xxxx| 亚洲成人国产精品| 三年片在线观看免费观看大全动漫| 亚洲人成综合在线播放| 免费人成网站在线高清| 毛片免费在线观看| 亚洲私人无码综合久久网| 在线精品亚洲一区二区小说 | 久久亚洲精品成人综合| 九九精品免费视频| 日本免费精品一区二区三区| 99久久精品国产亚洲| 波多野结衣久久高清免费| 久久午夜无码免费| 国产亚洲精品免费|