百度 VS Google,誰強大?!(有圖有真相)

不小心給發了兩條,sorry。
程序用DBCP連接池,連接mysql,昨天電腦沒關機,tomcat也沒關掉。今天發現應用掛了,看下錯誤:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed by the driver.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1160)
at com.mysql.jdbc.ConnectionImpl.getMutex(ConnectionImpl.java:3117)
at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4987)
at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:63)
... 32 more

挺奇怪,上網查了下,發現問題,其實以前個人認爲也是Google強大,但有圖爲證,只能說百度進步了, :idea: :
[img]http://dl.iteye.com/upload/attachment/488795/1ef11654-fece-3454-9b77-a1decac9bade.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/488797/a5e0ba8d-8b86-39b0-b0c7-f0baaa746edc.jpg[/img]
順便總結下問題,其實無論百度強,還是Google強,我也是打醬油的。
出現這個錯誤,首先是因爲DBCP連接池造成的,mysql默認的空閒連接時間是8個小時,超過8個小時就會被mysql強制斷開,但DBCP連接池中並未對這個已失效的連接進行更新,而是斷續當作有效連接,這時候如果程序用這個實際已斷開的連接去操作數據庫時,結果可想而知
解決辦法呢,有兩個:1、更改mysql的超時時間wait_timeout 這個改長點,這個治標不治本,如果非要使用DBCP連接池,也就這樣。2、更改連接池用C3P0,C3P0對失效的連接有處理,好像是重新連接。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章