작성
·
207
·
수정됨
1
초기에 트랜잭션이 시작되면 커넥션은 누가 얻어오는건가요?
Repository에서
DataSourceUtils.getConnection(dataSource); 실행되고 doGetConnection 메서드에서
ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
Connection con = fetchConnection(dataSource);
이렇게 얻어오는거같은데 트랜잭션 동기화매니저가 커넥션을 얻어오고 이 커넥션을 트랜잭션 매니저가 사용하는건가요??
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
네, 맞습니다. 트랜잭션이 시작되면 DataSourceUtils.getConnection(dataSource)
를 통해 커넥션을 얻어오게 됩니다. 여기서 TransactionSynchronizationManager
는 현재 트랜잭션에 연관된 리소스를 관리하는 역할을 하며, 트랜잭션이 시작될 때 해당 데이터 소스로부터 커넥션을 얻어와 커넥션 홀더에 보관합니다. 이렇게 TransactionSynchronizationManager
에 의해 관리되는 커넥션은 트랜잭션과 생명주기를 함께하며 트랜잭션 매니저가 사용하게 됩니다.
트랜잭션 중에는 같은 데이터 소스를 사용하는 모든 작업이 같은 커넥션을 공유하게 되어 트랜잭션의 일관성과 관리가 용이해집니다.
자세한 트랜잭션 관리 방법에 대해서는 Spring Boot의 JTA(Java Transaction API)를 활용한 분산 트랜잭션 관리 방법을 참고하시면 좋을 것 같습니다.
Spring Boot Reference Documentation 관련 내용에서 더 많은 정보를 얻을 수 있습니다.