我正在使用bonecp v0.8.0(我认为是最新的),与Mysql Connector / J 5.1.6配对
假设我有以下代码
BoneCP pool = new BoneCP(...);
Connection origConn = pool.getConnection();
Statement origStmt = conn.createStatement();
...
ResultSet rs = origStmt.executeQuery(...);
...
Statement newStmt = rs.getStatement();
Connection newConn = newStmt.getConnection();
rs.close();
newStmt.close();
newConn.close();
在上面的代码中,似乎origConn == newConn,origStmt!= newStmt。我发现这很奇怪。
我还发现如果我关闭newStmt而不是origStmt,我的连接往往会增长而不会被释放回连接池。这最终会导致我的应用程序耗尽连接并冻结(当它请求新连接时)。
javadocs让我相信ResultSet.getStatement()会返回创建它的同一个Statement对象,但是这可能不是BoneCP的情况。
任何人都知道这里发生了什么?