【问题标题】:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed but no tcp socket resetcom.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许操作,但没有 tcp 套接字重置
【发布时间】:2012-10-26 23:06:45
【问题描述】:

我的应用出现错误:

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 是否有任何设置来解决这个问题?

【问题讨论】:

  • 关闭一个池连接只会将它返回到池中。不需要新的服务器连接。

标签: java mysql jdbc c3p0


【解决方案1】:

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

http://www.mchange.com/projects/c3p0/#configuring_connection_testing

祝你好运!

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2015-02-16
    • 2012-12-07
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多