getConnection()을 수행하고 DBCP에서 BasicDataSource를 사용하면 finally 블록에서 연결을 닫습니다. 실제로 연결을 풀에 반환합니까 아니면 닫습니까? 연결. 내가 확인하고있는 스 니펫 코드는 다음과 같습니다.DBCP 연결 풀 connection.close()는 풀에 대한 연결을 반환합니다.
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의 알려진 문제입니까, 아니면 소스 코드를 잘못 읽고 있습니다 알려주세요.
감사
연결을 닫고 있습니다 ... 왜 그랬습니까? – SMA
연결을 닫지 않으면 maxActive Limit에 도달 한 후에 풀이 오류를 발생시킵니다. 연결 풀에서 연결을 닫으면 연결을 닫지 않고 연결 랩퍼가 다시 풀에 넣습니다. 하지만 소스 코드에서 같은 것을 추론 할 수 없습니다. –