有时候,我多次看到我日志中的以下错误:如何让Squeryl释放关闭连接回C3P0?
com.mchange.v2.c3p0.impl.NewPooledConnection - [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
com.mchange.v2.c3p0.impl.NewPooledConnection - [c3p0] Another error has occurred [ org.postgresql.util.PSQLException: This connection has been closed. ] which will not be reported to listeners!
org.postgresql.util.PSQLException: This connection has been closed.
at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:822)
at org.postgresql.jdbc2.AbstractJdbc2Connection.rollback(AbstractJdbc2Connection.java:839)
at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:855)
at org.squeryl.dsl.QueryDsl$class._executeTransactionWithin(QueryDsl.scala:131)
at org.squeryl.dsl.QueryDsl$class.transaction(QueryDsl.scala:78)
at org.squeryl.PrimitiveTypeMode$.transaction(PrimitiveTypeMode.scala:40)
下面是我自己的代码到我transaction {}
块的点的轨迹。
我的软件在引发异常后重复transaction {}
,但似乎再次使用相同(关闭)连接,因此下一次尝试也失败。奇怪的是,这需要相当长的时间,有时需要50秒,有时甚至需要2分钟。人们会认为一个封闭的连接会立即失败。
我该如何让Squeryl将这个连接释放到池中并获得一个新的连接?
您确实使用了一个新的事务{}块,是吗? – VasyaNovikov
我重新执行同一个,例如: while(!done){try {transaction {...} done = true} catch {case _ =>}} –
catch {...}是什么意思如果你登录它? 如果您认为这样可以,请将代码和内部异常添加到问题中:否则代码不会格式化。 – VasyaNovikov