paulwong

          My Links

          Blog Stats

          常用鏈接

          留言簿(67)

          隨筆分類(1393)

          隨筆檔案(1151)

          文章分類(7)

          文章檔案(10)

          相冊

          收藏夾(2)

          AI

          Develop

          E-BOOK

          Other

          養生

          微服務

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          60天內閱讀排行

          S2SH鏈接不關閉

          一套S2SH的應用,現用單線程,連續發1000個請求,用的DBCP鏈接池,結果報數據庫鏈接不夠用:

          ERROR [org.hibernate.util.JDBCExceptionReporter] - Cannot get a connection, pool error Timeout waiting for idle object

          在JAVA加上LOG:
          log.info("active: " + dataSource.getNumActive() + " (max: "
                          + dataSource.getMaxActive() + ")   " + "idle: " + dataSource.getNumIdle()
                          + "(max: " + dataSource.getMaxIdle() + ")");

          結果顯示為:
          active: 25 (max: 100)   idle: 0(max: 30)

          active的數量一直增加,但idle的數量一直為0。當程序向鏈接池要鏈接的時候,如果池沒有,就會新建一個,active數就會加1,關閉鏈接后,鏈接會返回池,idle數加1。idle為0則表示池里沒有鏈接。

          這樣說明鏈接一直在創建,沒有關閉放回池里。但鏈接是由SPRING和HIBERNATE管理的,代碼中沒有關閉鏈接的語句。之后試了N多配置,都還沒解決,如增加maxActive數等。最后,加上這一行,問題才終于解決:

          <prop key="hibernate.connection.release_mode">after_transaction</prop>

          這里默認值是auto,如果是用JTA事務才適用,如果是JDBC事務,就只能用after_transaction。

          這樣每次事務結束后,就會關閉鏈接返回鏈接池。

          posted on 2013-06-07 15:09 paulwong 閱讀(421) 評論(0)  編輯  收藏 所屬分類: HIBERNATESPRING

          主站蜘蛛池模板: 香河县| 连城县| 五指山市| 天镇县| 航空| 德庆县| 崇礼县| 沙湾县| 阿拉善盟| 淳化县| 偏关县| 阿鲁科尔沁旗| 城步| 榆树市| 建平县| 遂昌县| 长兴县| 禹城市| 双峰县| 仙居县| 滦南县| 乌拉特中旗| 五原县| 若羌县| 宜州市| 吉安县| 怀柔区| 拉孜县| 茂名市| 新绛县| 荔波县| 敦化市| 钦州市| 芮城县| 汕尾市| 定安县| 麦盖提县| 菏泽市| 黄平县| 新和县| 林西县|