少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          MySQL 的默認設置下,當一個連接的空閑時間超過8小時后,MySQL 就會斷開該連接,而 c3p0 連接池則以為該被斷開的連接依然有效。在這種情況下,如果客戶端代碼向 c3p0 連接池請求連接的話,連接池就會把已經失效的連接返回給客戶端,客戶端在使用該失效連接的時候即拋出異常。
          解決這個問題的辦法有三種:
          1. 增加 MySQL 的 wait_timeout 屬性的值。
          修改 /etc/mysql/my.cnf 文件,在 [mysqld] 節中設置:
          # Set a connection to wait 8 hours in idle status.
          wait_timeout 
          = 86400
          2. 減少連接池內連接的生存周期,使之小于上一項中所設置的 wait_timeout 的值。
          修改 c3p0 的配置文件,設置:
          # How long to keep unused connections around(in seconds)
          # Note: MySQL times out idle connections after 
          8 hours(28,800 seconds)
          # so ensure this value is below MySQL idle timeout
          cpool.maxIdleTime
          =25200
          在 Spring 的配置文件中:
          <bean id="dataSource"
              class
          ="com.mchange.v2.c3p0.ComboPooledDataSource">
              
          <property name="maxIdleTime" value="${cpool.maxIdleTime}" />
              
          <!-- other properties -->
          </bean>
          3. 定期使用連接池內的連接,使得它們不會因為閑置超時而被 MySQL 斷開。
          修改 c3p0 的配置文件,設置:
          # Prevent MySQL raise exception after a long idle time
          cpool.preferredTestQuery
          ='SELECT 1'
          cpool.idleConnectionTestPeriod
          =18000
          cpool.testConnectionOnCheckout
          =true
          修改 Spring 的配置文件:
          <bean id="dataSource"
              class
          ="com.mchange.v2.c3p0.ComboPooledDataSource">
              
          <property name="preferredTestQuery"
                  value
          ="${cpool.preferredTestQuery}" />
              
          <property name="idleConnectionTestPeriod"
                  value
          ="${cpool.idleConnectionTestPeriod}" />
              
          <property name="testConnectionOnCheckout"
                  value
          ="${cpool.testConnectionOnCheckout}" />
              
          <!-- other properties -->
          </bean>

          附:以下 awk 腳本可以用以將 c3p0.properties 文件中的屬性設置轉換成為 applicationContext.xml 中 數據庫連接池 DataSource 所需的 XML 元素形式。
          #!/bin/awk

          BEGIN {
              FS
          ="=";
          }
          {
              
          if (NF == 2) {
                  
          if ((x=index($1, ".")) > 0) {
                      property_name 
          = substr($1, x+1, length($1));
                  } 
          else {
                      property_name 
          = $1;
                  }
                  printf
          ("<property name="%s" value="${%s}"/> ", property_name, $1);
              }
          }
          posted on 2014-12-15 20:15 abin 閱讀(750) 評論(0)  編輯  收藏 所屬分類: dbConnectPool

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


          網站導航:
           
          主站蜘蛛池模板: 中山市| 乐昌市| 玉龙| 洪湖市| 玉溪市| 广东省| 两当县| 交口县| 屏东市| 华容县| 元氏县| 安阳县| 威信县| 东城区| 黄大仙区| 通城县| 九龙城区| 广平县| 临沭县| 天柱县| 常宁市| 青神县| 泰和县| 珲春市| 普陀区| 页游| 通渭县| 高州市| 增城市| 霍州市| 扎囊县| 偃师市| 双辽市| 阆中市| 调兵山市| 广安市| 四子王旗| 金溪县| 武宣县| 阿坝| 新巴尔虎右旗|