少年阿賓

          那些青春的歲月

            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 閱讀(743) 評論(0)  編輯  收藏 所屬分類: dbConnectPool

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


          網站導航:
           
          主站蜘蛛池模板: 淳安县| 大姚县| 灵武市| 揭阳市| 阜平县| 永清县| 瑞昌市| 伊宁市| 句容市| 镇雄县| 油尖旺区| 茌平县| 乌兰县| 东乌珠穆沁旗| 阿拉善盟| 松阳县| 通河县| 德庆县| 光泽县| 九江市| 泌阳县| 七台河市| 长治县| 房产| 资阳市| 绿春县| 巩义市| 霍林郭勒市| 文安县| 乃东县| 密山市| 且末县| 临邑县| 镇康县| 阿尔山市| 潮州市| 福海县| 乌兰察布市| 孟津县| 会理县| 曲水县|