com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭但没有tcp套接字重置后不允许任何操作

时间:2012-10-26 23:06:45

标签: java mysql jdbc c3p0

我的应用收到错误:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
        at sun.reflect.GeneratedConstructorAccessor281.newInstance(Unknown Source)
        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)

当我的应用看到该错误时,它会自动重试该操作。但是,当我执行tcpdump时,我没有看到当时创建任何新的tcp连接。看起来使用相同的tcp连接。那么为什么我得到例外?我的应用程序使用c3p0连接池,我在检入之前设置了c3p0来测试连接。是否有任何设置到mysql驱动程序或c3p0来解决这个问题?

1 个答案:

答案 0 :(得分:0)

testConnectionOnCheckin不足以确保Connections不会在池中超时。如果池不是很忙,Connections可能会无限期地保持登记状态并闲置。 testConnectionOnCheckin应与idleConnectionTestPeriod结合使用,以便定期验证空闲连接。

请参阅http://www.mchange.com/projects/c3p0/#configuring_connection_testing

祝你好运!