MySQL連接時,服務器默認的“wait_timeout”是8小時,也就是說一個connection空閒超過8個小時,Mysql將自動斷開該connection。connections如果空閒超過8小時,Mysql將其斷開,而DBCP並不知道該connection已經失效,如果這時有Client請求connection,DBCP將該失效的Connection提供給Client,將會造成異常。
mysql配置中my.cnf的wait_timeout值一定要大於等於連接池種的idle_timeout值。否則mysql會在wait_timeout的時間後關閉連接,然而連接池還認為該連接可用,這樣就會產生異常。
- org.apache.jasper.JasperException:javax.servlet.ServletException:
- javax.servlet.jsp.JspException::CommunicationslinkfailureLastpacketsenttotheserverwas1msago.org.apache.jasper.servlet.JspServletWrapper.handleJspExceptionJspServletWrapper.java:522)
- org.apache.jasper.servlet.JspServletWrapper.serviceJspServletWrapper.java:398)
- org.apache.jasper.servlet.JspServlet.serviceJspFileJspServlet.java:342)
- org.apache.jasper.servlet.JspServlet.serviceJspServlet.java:267)
- javax.servlet.http.HttpServlet.serviceHttpServlet.java:717)
DBCP連接池說明:driverClassNameurlusernamepassword上面四個分別是驅動,連接字符串,用戶名和密碼。
maxActive連接池支持的最大連接數。
maxIdle連接池中最多可空閒maxIdle個連接。
minIdle連接池中最少空閒maxIdle個連接。
initialSize初始化連接數目。
maxWait連接池中連接用完時,新的請求等待時間,毫秒。
timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每timeBetweenEvictionRunsMillis毫秒秒檢查一次連接池中空閒的連接,把空閒時間超過minEvictableIdleTimeMillis毫秒的連接斷開,直到連接池中的連接數到minIdle為止主要把這兩個參數加上就好。
minEvictableIdleTimeMillis連接池中連接可空閒的時間。
毫秒removeAbandonedtrue,false,是否清理。
removeAbandonedTimeout秒沒有使用的活動連接,清理後並沒有放回連接池。
removeAbandonedTimeout活動連接的最大空閒時間。
logAbandonedtrue,false,連接池收回空閒的活動連接時是否打印消息。
minEvictableIdleTimeMillis,removeAbandonedTimeout這兩個參數針對的連接對象不樣。
minEvictableIdleTimeMillis針對連接池中的連接對象。
removeAbandonedTimeout針對未被close的活動連接。
了解了MySQL連接的細節,那麼在以後遇到連接異常這樣的問題時,我們就能很方便的找出其中的錯誤了。本文就介紹到這裡,謝謝!