목차
DataSourceUitls 소개
DataSourceUitls가 Connection을 가져옵니다
getConnection 메소드
내부 구현
doGetConnection 메소드
fetchConnection 메서드
DataSourceUitls는 ​​Connection을 릴리스합니다
releaseConnection 메소드
doReleaseConnection 메소드
DataSourceUitls는 ​​Connection을 닫습니다
doCloseConnection 메소드
Java java지도 시간 DataSourceUitls 소개 및 방법

DataSourceUitls 소개 및 방법

Jul 26, 2017 pm 05:01 PM
connection 폐쇄

DataSourceUitls 소개

DataSourceUitls 클래스는 org.springframework.jdbc.datasource 패키지에 있으며 javax.sql.DataSource에서 JDBC 연결을 얻기 위한 많은 정적 메서드를 제공하고 Spring 트랜잭션 관리를 지원합니다.

JdbcTemplate 클래스 내에서는 DataSourceUtils가 여러 번 사용됩니다. 실제로 Jdbc를 작동하기 위해 코드에서 직접 DataSourceUitls를 사용할 수도 있습니다.

DataSourceUitls가 Connection을 가져옵니다

getConnection 메소드

내부 구현

    public static Connection getConnection(DataSource dataSource) throws CannotGetJdbcConnectionException {
        try {
            return doGetConnection(dataSource);
        }
        catch (SQLException ex) {
            throw new CannotGetJdbcConnectionException("Failed to obtain JDBC Connection", ex);
        }
        catch (IllegalStateException ex) {
            throw new CannotGetJdbcConnectionException("Failed to obtain JDBC Connection: " + ex.getMessage());
        }
    }
로그인 후 복사

지정된 DataSource를 전달하면 Connection을 얻을 수 있고, 획득 과정은 doGetConnection 메소드로 구현되는 것을 볼 수 있습니다. SQLException 및 IllegalStateException이 발생하는 경우 CannotGetJdbcConnectionException으로 래핑합니다. 실제로는 SQLException 및 IllegalStateException만 발생할 수 있습니다. CannotGetJdbcConnectionException의 소스 코드를 보면 CannotGetJdbcConnectionException이 실제로 DataAccessException의 하위 클래스라는 것을 알 수 있습니다. 따라서 getConnection은 던져진 예외를 Spring의 DataAccessException으로 균일하게 캡슐화한다고 말할 수 있습니다.

doGetConnection 메소드

내부 구현

    public static Connection doGetConnection(DataSource dataSource) throws SQLException {
        Assert.notNull(dataSource, "No DataSource specified");

        ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
        if (conHolder != null && (conHolder.hasConnection() || conHolder.isSynchronizedWithTransaction())) {
            conHolder.requested();
            if (!conHolder.hasConnection()) {
                logger.debug("Fetching resumed JDBC Connection from DataSource");
                conHolder.setConnection(fetchConnection(dataSource));
            }
            return conHolder.getConnection();
        }
        // Else we either got no holder or an empty thread-bound holder here.

        logger.debug("Fetching JDBC Connection from DataSource");
        Connection con = fetchConnection(dataSource);

        if (TransactionSynchronizationManager.isSynchronizationActive()) {
            logger.debug("Registering transaction synchronization for JDBC Connection");
            // Use same Connection for further JDBC actions within the transaction.
            // Thread-bound object will get removed by synchronization at transaction completion.
            ConnectionHolder holderToUse = conHolder;
            if (holderToUse == null) {
                holderToUse = new ConnectionHolder(con);
            }
            else {
                holderToUse.setConnection(con);
            }
            holderToUse.requested();
            TransactionSynchronizationManager.registerSynchronization(
                    new ConnectionSynchronization(holderToUse, dataSource));
            holderToUse.setSynchronizedWithTransaction(true);
            if (holderToUse != conHolder) {
                TransactionSynchronizationManager.bindResource(dataSource, holderToUse);
            }
        }

        return con;
    }
로그인 후 복사

doGetConnection 메소드는 실제로 Connection을 얻는 데 사용되는 핵심 메소드입니다. 소스 코드에서 현재 스레드에 바인딩된 연결이 없으면 새 연결이 생성된다는 결론을 내릴 수 있습니다. 현재 스레드의 트랜잭션 동기화가 활성화되면 Spring 트랜잭션 관리 지원이 연결에 추가됩니다. 현재 스레드에 해당 연결이 존재하는 경우 현재 트랜잭션 관리 할당이 있는 것입니다.

fetchConnection 메서드

fetchConnection은 공개되지 않는 비공개 메서드입니다. 실제로는 현재 DastaSource에서 새 연결을 생성하는 간단한 기능을 수행합니다. 생성이 실패하면 IllegalStateException이 발생하여 새 연결이 발생함을 나타냅니다. 얻을 수 없습니다.

DataSourceUitls는 ​​Connection을 릴리스합니다

releaseConnection 메소드

내부 구현

    public static void releaseConnection(@Nullable Connection con, @Nullable DataSource dataSource) {
        try {
            doReleaseConnection(con, dataSource);
        }
        catch (SQLException ex) {
            logger.debug("Could not close JDBC Connection", ex);
        }
        catch (Throwable ex) {
            logger.debug("Unexpected exception on closing JDBC Connection", ex);
        }
    }
로그인 후 복사

releaseConnection 메소드의 특정 구현은 doReleaseConnection에 의해 처리됩니다. 예외가 발생하면 로그에서만 디버깅되며 외부에서는 발생하지 않습니다. 이 메서드의 두 매개변수는 모두 NULL입니다.
con이 NULL이면 이 호출은 무시되고 다른 매개변수는 NULL이 될 수 있습니다.

doReleaseConnection 메소드

내부 구현

    public static void doReleaseConnection(@Nullable Connection con, @Nullable DataSource dataSource) throws SQLException {
        if (con == null) {
            return;
        }
        if (dataSource != null) {
            ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
            if (conHolder != null && connectionEquals(conHolder, con)) {
                // It's the transactional Connection: Don't close it.
                conHolder.released();
                return;
            }
        }
        logger.debug("Returning JDBC Connection to DataSource");
        doCloseConnection(con, dataSource);
    }
로그인 후 복사

doReleaseConnection 메소드는 실제로 Connection을 해제하는 메소드입니다. releaseConnection 메소드와 비교하면 전달된 두 매개변수의 체크섬을 완료하고 하위 수준 예외를 발생시킵니다. dataSource가 NULL이 아닌 경우 현재 Connection을 재사용할 수 있도록 이 ConnectionHolder가 보유하고 있는 현재 연결을 해제합니다. 이는 Jdbc 작업 성능을 향상시키는 데 매우 유용합니다. dataSource가 null인 경우 연결을 직접 닫도록 선택하세요.

DataSourceUitls는 ​​Connection을 닫습니다

doCloseConnection 메소드

내부 구현

    public static void doCloseConnection(Connection con, @Nullable DataSource dataSource) throws SQLException {
        if (!(dataSource instanceof SmartDataSource) || ((SmartDataSource) dataSource).shouldClose(con)) {
            con.close();
        }
    }
로그인 후 복사

doReleaseConnection 메소드에서는 데이터 소스가 NULL일 때 doCloseConnection 메소드가 실행된다는 것을 배웠습니다. 실제로 dataSource가 org.springframework.jdbc.datasource.SmartDataSource 인터페이스를 구현하지 않거나 dataSource가 org.springframework.jdbc.datasource.SmartDataSource 인터페이스를 구현하고 닫히도록 허용된 경우에만 Connection이 실제로 닫힙니다.

org.springframework.jdbc.datasource.SmartDataSource 인터페이스는 Jdbc 연결을 래핑되지 않은 형식으로 반환하는 javax.sql.DataSource 인터페이스의 확장입니다. 이 인터페이스를 구현하는 클래스는 작업을 완료한 후 연결을 닫아야 하는지 여부를 쿼리할 수 있습니다. 이러한 검사는 Srping, DataSourceUitls 및 JdbcTemplate에서 자동으로 수행됩니다.

위 내용은 DataSourceUitls 소개 및 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

360 브라우저에서 권장하는 광고를 끄는 방법은 무엇입니까? PC에서 360 브라우저가 권장하는 광고를 끄는 방법은 무엇입니까? 360 브라우저에서 권장하는 광고를 끄는 방법은 무엇입니까? PC에서 360 브라우저가 권장하는 광고를 끄는 방법은 무엇입니까? Mar 14, 2024 am 09:16 AM

360 브라우저에서 권장하는 광고를 끄는 방법은 무엇입니까? 많은 사용자들이 360 브라우저를 사용하고 있다고 생각합니다. 그러나 이 브라우저는 때때로 광고가 표시되어 많은 사용자들을 매우 고민하게 만듭니다. 이 사이트에서는 컴퓨터에서 360 브라우저에서 권장하는 광고를 끄는 방법을 사용자에게 주의 깊게 소개하겠습니다. 컴퓨터에서 360 브라우저가 권장하는 광고를 끄는 방법은 무엇입니까? 방법 1: 1. 360 안전 브라우저를 엽니다. 2. 오른쪽 상단에 있는 "세 개의 가로 막대" 로고를 찾아 [설정]을 클릭하세요. 3. 팝업 인터페이스 왼쪽 작업 표시줄에서 [실험실]을 찾아 ["360 핫스팟 정보" 기능 활성화]를 선택합니다. 방법 2: 1. 먼저 두 번 클릭합니다.

Kuaishou에서 비밀번호 없이 결제를 종료하는 방법 Kuaishou 비밀번호 없이 결제를 종료하는 방법에 대한 튜토리얼 Kuaishou에서 비밀번호 없이 결제를 종료하는 방법 Kuaishou 비밀번호 없이 결제를 종료하는 방법에 대한 튜토리얼 Mar 23, 2024 pm 09:21 PM

Kuaishou는 뛰어난 비디오 플레이어입니다. Kuaishou의 비밀번호 없는 결제 기능은 일상생활에서, 특히 플랫폼에서 필요한 상품을 구매할 때 큰 도움이 될 수 있습니다. 이제 취소를 해야 하는데 어떻게 취소할 수 있나요? 비밀번호 없이 결제를 취소하는 방법은 매우 간단합니다. 이 사이트의 전체 가이드를 함께 살펴보겠습니다. 모든 사람에게 도움이 되기를 바랍니다. Kuaishou에서 비밀번호 없는 결제를 종료하는 방법에 대한 튜토리얼 1. Kuaishou 앱을 열고 왼쪽 상단에 있는 세 개의 수평선을 클릭합니다. 2. Kuaishou 스토어를 클릭하세요. 3. 위 옵션바에서 비밀번호 없는 결제를 찾아 클릭해주세요. 4. 지원하려면 클릭하세요.

Sina News Express를 끄는 방법 Express 기능을 끄는 방법은 무엇입니까? Sina News Express를 끄는 방법 Express 기능을 끄는 방법은 무엇입니까? Mar 12, 2024 pm 09:46 PM

Sina News 소프트웨어는 기본적으로 공식 플랫폼에서 제공하는 많은 뉴스 헤드라인 정보를 제공합니다. 각 뉴스 기사의 내용은 정통합니다. 한 번의 클릭으로 위아래로 스와이프하여 검색하고 탐색할 수 있어 전반적인 독서 분위기가 더욱 편안해집니다. . 온라인으로 로그인하려면 휴대폰 번호를 입력하세요. 다양한 분야의 뉴스 채널이 열려 있습니다. 24시간 업데이트가 반복되지 않습니다. 국내, 해외, 지역 시사 뉴스를 한 번의 클릭으로 선택하세요. 뉴스 내용은 모두 관심이 있으시면 뉴스 익스프레스 기능을 꺼두셔도 됩니다. 언제든지 열어서 방대한 인기 뉴스 헤드라인을 미리 보실 수 있습니다. Sina News 사용자에게 온라인으로 빠른 배송 기능의 작동 단계에 대한 세부 정보를 제공합니다. 시나뉴스를 찾아 오른쪽 하단을 클릭하세요.

Windows 11 보안 센터를 끄는 방법에 대한 자세한 설명 Windows 11 보안 센터를 끄는 방법에 대한 자세한 설명 Mar 27, 2024 pm 03:27 PM

Windows 11 운영 체제에서 보안 센터는 사용자가 시스템 보안 상태를 모니터링하고 악성 코드로부터 보호하며 개인 정보를 보호하는 데 도움을 주는 중요한 기능입니다. 그러나 때로는 사용자가 특정 소프트웨어를 설치하거나 시스템 튜닝을 수행하는 경우와 같이 Security Center를 일시적으로 꺼야 할 수도 있습니다. 이 글에서는 시스템을 올바르고 안전하게 운영하기 위해 Windows 11 보안 센터를 끄는 방법을 자세히 소개합니다. 1. Windows 11 보안 센터를 끄는 방법 Windows 11에서는 보안 센터를 꺼도 작동하지 않습니다.

Windows 보안 센터에서 실시간 보호를 끄는 방법에 대한 자세한 설명 Windows 보안 센터에서 실시간 보호를 끄는 방법에 대한 자세한 설명 Mar 27, 2024 pm 02:30 PM

세계에서 가장 많은 사용자를 보유한 운영 체제 중 하나인 Windows 운영 체제는 항상 사용자들의 선호를 받아왔습니다. 그러나 Windows 시스템을 사용할 때 사용자는 바이러스 공격, 맬웨어 및 기타 위협과 같은 많은 보안 위험에 직면할 수 있습니다. 시스템 보안을 강화하기 위해 Windows 시스템에는 다양한 보안 보호 메커니즘이 내장되어 있으며 그 중 하나가 Windows 보안 센터의 실시간 보호 기능입니다. 오늘은 Windows 보안 센터에서 실시간 보호를 끄는 방법을 자세히 소개하겠습니다. 먼저,

Windows 11에서 보안 센터를 끄는 방법 Windows 11에서 보안 센터를 끄는 방법 Mar 28, 2024 am 10:21 AM

Windows 11은 Microsoft가 출시한 최신 운영 체제 버전입니다. 이전 버전에 비해 Windows 11의 중요한 기능 중 하나는 보안 센터입니다. Security Center는 사용자가 시스템의 보안 상태를 관리하고 모니터링하여 시스템이 맬웨어 및 기타 보안 위협으로부터 보호되도록 도와줍니다. Security Center는 시스템 보안을 보호하는 데 중요하지만, 때때로 사용자는 개인적인 필요나 기타 이유로 Security Center를 끄고 싶을 수도 있습니다. 이번 글에서는 W 사용법을 소개하겠습니다.

opporeno5에서 Dolby Atmos를 끄는 위치_opporeno5에서 Dolby Atmos를 비활성화하는 방법 opporeno5에서 Dolby Atmos를 끄는 위치_opporeno5에서 Dolby Atmos를 비활성화하는 방법 Mar 25, 2024 pm 04:41 PM

1. 휴대폰 설정에서 소리 및 진동을 클릭하세요. 2. 돌비 애트모스를 클릭하세요. 3. Dolby Atmos 뒤에 있는 스위치를 끕니다.

지금 사용을 중지하고 핀둬둬에서 나중에 결제하는 방법 핀둬둬에서 지금 사용을 중지하고 나중에 결제하는 방법 지금 사용을 중지하고 핀둬둬에서 나중에 결제하는 방법 핀둬둬에서 지금 사용을 중지하고 나중에 결제하는 방법 Mar 12, 2024 pm 04:07 PM

Pinduoduo에서 지금 사용을 중지하고 나중에 결제하는 기능은 어떻게 됩니까? Pinduoduo는 사용자가 온라인으로 물건을 구매하고 집까지 배송받을 수 있게 해주는 매우 스마트한 소프트웨어입니다. 사용자가 이 소프트웨어를 사용할 수 있도록 나중에 지불 기능이 출시되었습니다. 많은 사용자가 이 기능을 취소하고 싶어합니다. 다음 편집기는 참고용으로 나중에 지불 기능을 취소하는 방법을 정리했습니다. 핀둬둬 지금 사용중지, 나중에 결제 기능을 해제하는 방법 1. 핀둬둬 개인 홈페이지에 접속한 후 '설정'을 클릭하세요. 2. 설정에서 '지금 사용하고 나중에 결제 설정'을 클릭하세요. 삼.

See all articles