트랜잭션 보충자료
DataSourceUtils
는 Spring 프레임워크에서 데이터 소스를 관리하고 트랜잭션 처리 시 데이터베이스 연결을 효율적으로 처리하기 위해 제공되는 유틸리티 클래스입니다. 주로 Spring의 JDBC 모듈에서 사용되며, javax.sql.DataSource
와 함께 트랜잭션 경계를 유지하면서 커넥션을 안전하게 가져오거나 반환할 때 사용됩니다.
주요 기능
트랜잭션 컨텍스트에서 커넥션 가져오기
DataSourceUtils
를 사용하면 트랜잭션 경계 내에서 데이터 소스에서Connection
객체를 가져옵니다. Spring의 트랜잭션 관리자가 활성화된 경우, 이 클래스는 트랜잭션 경계와 연결된Connection
을 반환하며, 그렇지 않으면 데이터 소스에서 새Connection
을 생성합니다.커넥션 반환 처리 트랜잭션 컨텍스트 내에서 사용된
Connection
을 닫는 대신,DataSourceUtils.releaseConnection
메서드를 통해 반환하면 Spring이 커넥션 반환을 올바르게 처리합니다. 트랜잭션이 활성화된 경우, 커넥션을 닫지 않고 풀에 반환하거나 트랜잭션 매니저에 연결된 상태를 유지합니다.
주요 메서드
1. getConnection(DataSource dataSource)
지정된
DataSource
로부터Connection
을 가져옵니다.활성 트랜잭션이 있으면 트랜잭션과 연결된
Connection
을 반환합니다.트랜잭션이 없으면 새 커넥션을 생성합니다.
2. releaseConnection(Connection con, DataSource dataSource)
사용이 끝난
Connection
을 적절히 반환합니다.트랜잭션 경계 내에서는 커넥션을 실제로 닫지 않고 관리하고, 트랜잭션 외부에서는 풀로 반환하거나 닫습니다.
3. isConnectionTransactional(Connection con, DataSource dataSource)
지정된
Connection
이 현재 트랜잭션에 속해 있는지 확인합니다.
주요 사용 사례
Spring 트랜잭션과의 통합
@Transactional
을 사용하는 경우,DataSourceUtils
는 트랜잭션 컨텍스트에서 적절한Connection
을 제공하고 반환합니다.Spring JDBC Template Spring의
JdbcTemplate
내부에서도DataSourceUtils
를 사용하여 데이터베이스 연결을 관리합니다.커넥션 관리 최적화 트랜잭션 처리 중 커넥션을 안전하게 재사용하거나 반환하도록 보장합니다.
주의사항
직접 커넥션을 닫지 말 것
DataSourceUtils
로 가져온 커넥션은 직접close()
를 호출하지 말고, 반드시DataSourceUtils.releaseConnection
으로 반환해야 합니다. 직접 닫으면 트랜잭션이 깨질 수 있습니다.트랜잭션 설정 확인 트랜잭션이 올바르게 설정되지 않으면
DataSourceUtils
가 예상대로 작동하지 않을 수 있습니다.
예제 코드
Last updated