0

我的应用程序出现错误:

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

4

1 回答 1

0

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

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

祝你好运!

于 2012-10-27T14:10:52.190 回答