1. 程式人生 > >解決c3p0連線資料庫超時問題

解決c3p0連線資料庫超時問題

問題: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"/>