我的程序部署在tomcat中,用的连接池是c3po。tomcat运行,mysql也正常运行的情况下,一切正常,我的程序读写数据库都ok。
为了做异常测试,我把msyql服务关闭掉,然后运行程序读写数据库,自然出了连接异常,可是我重新启动了mysql服务(tomcat没有重启,不允许重启),运行程序读写的时候,仍然是报连接错误,错误日志如下。我希望的情况是重启mysql后,程序能自动重连接的,不知道怎么配置了,附上我的hibernate配置(里面包括了c3p0连接池的配置),大家帮忙看看是不是哪配置错了。
** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.io.EOFException
MESSAGE: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.STACKTRACE:java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1997)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
        at org.hibernate.loader.Loader.doQuery(Loader.java:674)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        at org.hibernate.loader.Loader.list(Loader.java:2099)
        at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
        at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
        at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
        at com.alcatel.toneSynch.servlet.CreateAnnouncementServlet.existFile

解决方案 »

  1.   

    (CreateAnnouncementServlet.java:229)
            at com.alcatel.toneSynch.servlet.CreateAnnouncementServlet.doPost(CreateAnnouncementServlet.java:100)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at com.alcatel.toneSynch.utils.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:21)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
            at java.lang.Thread.run(Thread.java:595)
    ** END NESTED EXCEPTION **Last packet sent to the server was 2 ms ago.STACKTRACE:com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** 
      

  2.   

    java.io.EOFException
    MESSAGE: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.STACKTRACE:java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
            at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1997)
            at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411)
            at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)
            at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
            at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
            at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
            at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
            at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
            at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
            at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
            at org.hibernate.loader.Loader.doQuery(Loader.java:674)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
            at org.hibernate.loader.Loader.doList(Loader.java:2220)
            at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
            at org.hibernate.loader.Loader.list(Loader.java:2099)
            at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
            at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
            at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
            at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
            at com.alcatel.toneSynch.servlet.CreateAnnouncementServlet.existFile(CreateAnnouncementServlet.java:229)
            at com.alcatel.toneSynch.servlet.CreateAnnouncementServlet.doPost(CreateAnnouncementServlet.java:100)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at com.alcatel.toneSynch.utils.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:21)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
            at java.lang.Thread.run(Thread.java:595)
    ** END NESTED EXCEPTION **
      

  3.   

    Last packet sent to the server was 2 ms ago.
            at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2622)
            at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)
            at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
            at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
            at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
            at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
            at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
            at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
            at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
            at org.hibernate.loader.Loader.doQuery(Loader.java:674)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
            at org.hibernate.loader.Loader.doList(Loader.java:2220)
            at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
            at org.hibernate.loader.Loader.list(Loader.java:2099)
            at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
            at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
            at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
            at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
            at com.alcatel.toneSynch.servlet.CreateAnnouncementServlet.existFile(CreateAnnouncementServlet.java:229)
            at com.alcatel.toneSynch.servlet.CreateAnnouncementServlet.doPost(CreateAnnouncementServlet.java:100)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at com.alcatel.toneSynch.utils.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:21)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
            at java.lang.Thread.run(Thread.java:595)
    ** END NESTED EXCEPTION **
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
            at com.mysql.jdbc.Connection.checkClosed(Connection.java:1930)
            at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4721)
            at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4687)
            at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
            at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
            at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
            at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)
            at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2224)
            ... 29 more
    -------------------------
      

  4.   

    我用C3P0也遇到了你的这个问题,我在C3P0遇到的你这个问题,我弄了很久,都没有解决。为什么会出现这个问题,原来是Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。像这样子就只能重启tomcat才能再次连接上去。后来改用proxool,就解决这个问题。
    建议楼主改用proxool,用了后会觉得还不错。
      

  5.   

    嗯,我一直用proxool,没出现这种问题。