最近的一個(gè)項(xiàng)目在Hibernate使用C3P0的連接池,數(shù)據(jù)庫為Mysql。開發(fā)測(cè)試沒有問題,在運(yùn)行中每個(gè)一段長的空閑時(shí)間就出現(xiàn)異常:
java 代碼
- org.hibernate.exception.JDBCConnectionException:?could?not?execute?query ??
- ????at?org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74) ??
- ????at?org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) ??
- ????....... ??
- Caused?by:?com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:?No?operations?allowed?after?connection?closed.Connection?was?implicitly?closed?due?to?underlying?exception/error: ??
- ??
- ??
- **?BEGIN?NESTED?EXCEPTION?**? ??
- ??
- com.mysql.jdbc.CommunicationsException ??
- MESSAGE:?Communications?link?failure?due?to?underlying?exception:? ??
- ??
- **?BEGIN?NESTED?EXCEPTION?**? ??
- ??
- java.net.SocketException ??
- MESSAGE:?Broken?pipe ??
- ??
- STACKTRACE: ??
- ??
- java.net.SocketException:?Broken?pipe ??
- ????at?java.net.SocketOutputStream.socketWrite0(Native?Method) ??
- ????...... ??
- **?END?NESTED?EXCEPTION?** ??
查看了Mysql的文檔,以及Connector/J的文檔以及在線說明發(fā)現(xiàn),出現(xiàn)這種異常的原因是:
?? Mysql服務(wù)器默認(rèn)的“wait_timeout”是8小時(shí),也就是說一個(gè)connection空閑超過8個(gè)小時(shí),Mysql將自動(dòng)斷開該connection。這就是問題的所在,在C3P0 pools中的connections如果空閑超過8小時(shí),Mysql將其斷開,而C3P0并不知道該connection已經(jīng)失效,如果這時(shí)有Client請(qǐng)求connection,C3P0將該失效的Connection提供給Client,將會(huì)造成上面的異常。
解決的方法有3種:
- 增加wait_timeout的時(shí)間。
- 減少Connection pools中connection的lifetime。
- 測(cè)試Connection pools中connection的有效性。
當(dāng)然最好的辦法是同時(shí)綜合使用上述3種方法,下面就DBCP和C3P0分別做一說明,假設(shè)wait_timeout為默認(rèn)的8小時(shí)
DBCP增加以下配置信息:
- ??
- validationQuery?=?"SELECT?1"??
- ??
- testWhileIdle?=?"true"? ??
- ??
- timeBetweenEvictionRunsMillis?=?3600000??
- ??
- minEvictableIdleTimeMillis?=?18000000??
- ??
- testOnBorrow?=?"true"??
C3P0增加以下配置信息:
- ??
- preferredTestQuery?=?'SELECT?1'? ??
- ???
- idleConnectionTestPeriod?=?18000?? ??
- ??
- maxIdleTime?=?25000? ??
- ??
- testConnectionOnCheckout?=?true????
更多的配置信息大家可以查看C3P0文檔,Connector/J文檔,以及DBCP的文檔
posted on 2006-12-25 19:01
OMG 閱讀(660)
評(píng)論(0) 編輯 收藏 所屬分類:
Hibernate