1. 程式人生 > 實用技巧 >tomcat連線池配置詳解

tomcat連線池配置詳解

1.連線池配置

<bean class="org.apache.tomcat.jdbc.pool.PoolProperties">  
    <property name="url" value="${jdbcUrl}"/> 
        <!--資料庫驅動--> 
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
        <!--使用者名稱-->
        <property name="username" value="
mysql"/> <!--密碼--> <property name="password" value="123456"/> <!--註冊池JMX,預設:true--> <property name="jmxEnabled" value="false"/> <!--檢查連線死活的時間間隔,單位:毫秒--> <property name="validationInterval" value="30000"/> <!--指定連線進入空閒狀態時是否經過空閒物件驅逐程序的校驗,如果校驗未通過,則該連線被連線池斷掉 值為true,則validationQuery引數必須為一個非空字串
----> <property name="testWhileIdle" value="false"/> <!--指定連線返回到池中是時是否經過校驗 值為true,則validationQuery引數必須為一個非空字串----> <property name="testOnReturn" value="false"/> <!--指定連線被呼叫時是否經過校驗,如果校驗未通過,則該連線被連線池斷掉,並由連線池嘗試呼叫另一個連線 值為true,則validationQuery引數必須為一個非空字串
--> <property name="testOnBorrow" value="true"/> <!--在連線返回給呼叫者前用於校驗連線是否有效的SQL語句,如果指定了SQL語句,則必須為一個SELECT語句,且至少有一行結果--> <property name="validationQuery" value="select 1"/> <!--連線池處於活動狀態的資料庫連線的最大數目,0表示不限制,表示最大併發--> <property name="maxActive" value="1000"/> <!--初始化連線數--> <property name="initialSize" value="10"/> <!--連線池中連線用完時,新的請求的等待時間(即等待別的連線空閒),超時返回異常,毫秒--> <property name="maxWait" value="100000"/> <!--以毫秒錶示空閒物件驅逐程序由休眠狀態進入執行狀態的數值,值為非正整時表示不執行任何空閒物件驅逐程序 執行判斷連線超時任務的時間間隔--> <property name="timeBetweenEvictionRunsMillis" value="30000"/> <!--以毫秒錶示連線被空閒物件驅逐程序驅逐前在池中保持空閒狀態的最小時間,連線的超時時間,預設為半小時--> <property name="minEvictableIdleTimeMillis" value="30000"/> <!--連線池檢查每個空閒物件驅逐程序的物件數量 <property name="numTestPerEvictionRun" value="3"/> --> <!--連線池處於空閒狀態的資料庫連線的最小數目,低於此數值將會建立所欠缺的連線,設0無限制--> <property name="minIdle" value="10"/> <!--連線池處於空閒狀態的資料庫連線的最大數目,取非正整數表示不受限制,超過此數值時多餘的空閒連線將會被釋放--> <property name="maxIdle" value="200"/> <!--當清除無效連線時是否在日誌中記錄清除資訊的標誌--> <property name="logAbandoned" value="false"/> <!--是否清除已經超過 removeAbandonedTimeout 設定的無效連線,自動回收超時連線 啟動機制:getNumActive() > getMaxActive() - 3 和 getNumIdle() < 2 假設maxActive=20,而當前18個活動連線,1個空閒連線,機制將會啟動 但是隻有在活動連線沒有使用的時長超過“removeAbandonedTimeout”(預設300秒),的連線將被清除--> <property name="removeAbandoned" value="true"/> <!--以秒錶示清除無效連線的時限,自我中斷時間,單位秒--> <property name="removeAbandonedTimeout" value="60"/> <!--設定攔截器,預設為空 ConnectionState:跟蹤自動提交,只讀目錄和事務隔離級別 StatementFinalizer:跟蹤開啟的語句,並關閉連線時的返回到池中 --> <property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/> </bean>

2.tomcat jdbc連線池配置屬性詳解之引數說明

3.高併發造資料池異常問題org.apache.tomcat.jdbc.pool.PoolExhaustedException:

[pool-21-thread-16] Timeout: Pool emp

專案正常使用沒有問題,一旦出現高併發情況,會導致資料庫無法連線;

方案一:更改Tomcat連線池配置,簡書上有個同樣問題,可以參考一下

https://www.jianshu.com/p/0ac735a638c2

解決方案:修改最大連線數maxActive