如果我们执行getConnection(),则使用DBCP中的BasicDataSource,在finally块中我们关闭连接,它确实会返回到池的连接或关闭连接。我正在检查的代码段是
try {
Connection conn1 = getJdbcTemplate().getDataSource()
.getConnection();
//Some code to call stored proc
} catch (SQLException sqlEx) {
throw sqlEx;
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex1) {
throw ex1;
}
}
我正在检查BasicDataSource的源代码,我到达了这个连接的包装类。
private class PoolGuardConnectionWrapper extends DelegatingConnection {
private Connection delegate;
PoolGuardConnectionWrapper(Connection delegate) {
super(delegate);
this.delegate = delegate;
}
public void close() throws SQLException {
if (delegate != null) {
this.delegate.close();
this.delegate = null;
super.setDelegate(null);
}
}
类型为java.sql.Connection的委托对象。包装器代码调用委托的close方法,该方法将关闭集合而不是将连接返回到池。这是DBCP的已知问题,还是我错误地阅读了源代码,请告诉我。
由于