DataSourceUitls 소개 및 방법
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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