BoneCP和Derby – 如何正确关闭

我有:

BoneCP CONNECTION_POOL = ...; CONNECTION_POOL.getConfig().setJdbcUrl("jdbc:derby:database...;shutdown=true"); Connection connection = CONNECTION_POOL.getConnection(); connection.close(); CONNECTION_POOL.shutdown(); 

但是,这会导致以下exception:

 3274 [com.google.common.base.internal.Finalizer] ERROR com.jolbox.bonecp.ConnectionPartition - Error while closing off internal db connection java.sql.SQLException: Cannot close a connection while a transaction is still active. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.checkForTransactionInProgress(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.close(Unknown Source) at com.jolbox.bonecp.ConnectionPartition$1.finalizeReferent(ConnectionPartition.java:187) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.base.internal.Finalizer.cleanUp(Finalizer.java:154) at com.google.common.base.internal.Finalizer.run(Finalizer.java:127) 

我该如何避免这种exception。 我已经尝试了一切可能的方法……

除非您运行的是v0.8.1-beta2或更高版本,否则请在配置中将“disableConnectionTracking”设置为true。

请注意,在成功关闭后,您还应该期待来自Derby的SQLException: http : //db.apache.org/derby/docs/dev/devguide/tdevdvlp40464.html