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 に答える