gpt4 book ai didi

java - DBCP连接池connection.close()是否返回连接池

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:38 25 4
gpt4 key购买 nike

如果我们执行 getConnection() 并在 finally block 中关闭连接,则使用 DBCP 中的 BasicDataSource 是它真的将连接返回到池中还是关闭了连接。我正在检查的代码片段是这样的

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 类型的委托(delegate)对象。包装器代码调用委托(delegate)的关闭方法,该方法将关闭集合而不是将连接返回到池中。这是 DBCP 的已知问题还是我没有正确阅读源代码,请告诉我。

谢谢

最佳答案

你最终会调用 PoolableConnection.close() ,将其返回到池中。

关于java - DBCP连接池connection.close()是否返回连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com