MySQL連接空閑超過(guò)8小時(shí)DBCP造成的異常如何解決
MySQL連接時(shí),服務(wù)器默認(rèn)的“wait_timeout”是8小時(shí),也就是說(shuō)一個(gè)connection空閑超過(guò)8個(gè)小時(shí),Mysql將自動(dòng)斷開(kāi)該connection。connections如果空閑超過(guò)8小時(shí),Mysql將其斷開(kāi),而DBCP并不知道該connection已經(jīng)失效,如果這時(shí)有Client請(qǐng)求connection,DBCP將該失效的Connection提供給Client,將會(huì)造成異常。
mysql配置中my.cnf的wait_timeout值一定要大于等于連接池種的idle_timeout值。否則mysql會(huì)在wait_timeout的時(shí)間后關(guān)閉連接,然而連接池還認(rèn)為該連接可用,這樣就會(huì)產(chǎn)生異常。
- org.apache.jasper.JasperException:javax.servlet.ServletException:
- javax.servlet.jsp.JspException::CommunicationslinkfailureLastpacketsenttotheserverwas1msago.org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
- org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
- org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
- org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
DBCP連接池說(shuō)明:driverClassNameurlusernamepassword上面四個(gè)分別是驅(qū)動(dòng),連接字符串,用戶(hù)名和密碼。
maxActive連接池支持的***連接數(shù)。
maxIdle連接池中最多可空閑maxIdle個(gè)連接。
minIdle連接池中最少空閑maxIdle個(gè)連接。
initialSize初始化連接數(shù)目。
maxWait連接池中連接用完時(shí),新的請(qǐng)求等待時(shí)間,毫秒。
timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每timeBetweenEvictionRunsMillis毫秒秒檢查一次連接池中空閑的連接,把空閑時(shí)間超過(guò)minEvictableIdleTimeMillis毫秒的連接斷開(kāi),直到連接池中的連接數(shù)到minIdle為止主要把這兩個(gè)參數(shù)加上就好。
minEvictableIdleTimeMillis連接池中連接可空閑的時(shí)間。
毫秒removeAbandonedtrue,false,是否清理。
removeAbandonedTimeout秒沒(méi)有使用的活動(dòng)連接,清理后并沒(méi)有放回連接池。
removeAbandonedTimeout活動(dòng)連接的***空閑時(shí)間。
logAbandonedtrue,false,連接池收回空閑的活動(dòng)連接時(shí)是否打印消息。
minEvictableIdleTimeMillis,removeAbandonedTimeout這兩個(gè)參數(shù)針對(duì)的連接對(duì)象不樣。
minEvictableIdleTimeMillis針對(duì)連接池中的連接對(duì)象。
removeAbandonedTimeout針對(duì)未被close的活動(dòng)連接。
了解了MySQL連接的細(xì)節(jié),那么在以后遇到連接異常這樣的問(wèn)題時(shí),我們就能很方便的找出其中的錯(cuò)誤了。本文就介紹到這里,謝謝!
【編輯推薦】