解決c3p0連線資料庫超時問題
阿新 • • 發佈:2018-12-19
問題:c3p0連線資料庫超時
在用c3p0連線mysql資料庫時,時間長了會自動斷開,那是因為mysql伺服器預設的“wait_timeout”是8小時【也就是預設的值預設是28800秒】,也就是說一個connection空閒超過8個小時,Mysql將自動斷開該connection,通俗的講就是一個連線在8小時內沒有活動,就會自動斷開該連線。wait timeout的值可以設定,但最多隻能是2147483,不能再大了。也就是約24.85天。但是更改wait timeout值治標不治本,所有我們要更改連線池的配置檔案。
解決辦法
在c3p0連線池的配置檔案中加入以下配置程式碼(根據需要增刪):
<!-- 初始化連線池中的連線數,取值應在minPoolSize與maxPoolSize之間,預設為3--> <property name="initialPoolSize" value="2"/> <!-- 連線池中保留的最小連線數,預設為:3--> <property name="minPoolSize" value="2"/> <!--連線池中保留的最大連線數。預設值: 15 --> <property name="maxPoolSize" value="15"/> <!--當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。預設值: 3 --> <property name="acquireIncrement" value="2"/> <!--定義在從資料庫獲取新連線失敗後重復嘗試的次數。預設值: 30 ;小於等於0表示無限次--> <property name="acquireRetryAttempts" value="0"/> <!--重新嘗試的時間間隔,預設為:1000毫秒--> <property name="acquireRetryDelay" value="1000" /> <!--最大空閒時間,3600秒內未使用則連線被丟棄。若為0則永不丟棄。預設值: 0 --> <property name="maxIdleTime" value="3600"/> <!--c3p0全域性的PreparedStatements快取的大小。如果maxStatements與maxStatementsPerConnection均為0,則快取不生效,只要有一個不為0,則語句的快取就能生效。如果預設值: 0--> <property name="maxStatements" value="0"/> <!--maxStatementsPerConnection定義了連線池內單個連線所擁有的最大快取statements數。預設值: 0 --> <property name="maxStatementsPerConnection" value="0"/> <!--定義所有連線測試都執行的測試語句。在使用連線測試的情況下這個一顯著提高測試速度。測試的表必須在初始資料來源的時候就存在。Default: null--> <property name="preferredTestQuery" value="select 1"/> <!--每1800秒檢查所有連線池中的空閒連線。Default: 0 --> <property name="idleConnectionTestPeriod" value="1800"/> <!-- 獲取連線時測試有效性,每次都驗證連線是否可用 --> <property name="testConnectionOnCheckout" value="false"/>