Bietet der DBCP-Verbindungspool connection.close () die Rückgabe der Verbindung zum Pool

Wenn Sie BasicDataSource von DBCP verwenden, wenn Sie getConnection () ausführen und im finally-Block die Verbindung schließen, wird die Verbindung wirklich zum Pool zurückgegeben oder die Verbindung wird geschlossen. Der Snippet-Code, den ich überprüfe, ist dieses

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;
        }

    }

Ich habe den Quellcode von BasicDataSource überprüft und diese Wrapper-Klasse für die Verbindung erreicht.

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);
        }
    }

Das Delegatenobjekt, wenn es vom Typ java.sql.Connection ist. Der Wrapper-Code ruft die close-Methode des Delegaten auf, die die Auflistung schließt, anstatt die Verbindung zum Pool zurückzugeben. Ist dies ein bekanntes Problem mit DBCP oder lese ich den Quellcode falsch, lassen Sie es mich bitte wissen.

Vielen Dan

Antworten auf die Frage(2)

Ihre Antwort auf die Frage