Category: Spring DB

0

[Spring] - 트랜잭션 동기화 (TransactionSynchronizationManager)

리소스 동기화 - TransactionSynchronizationManager트랜잭션을 유지하기 위해서는 트랜잭션 시작부터 끝까지 같은 데이터 베이스 Connection 을 유지해야 합니다. 스프링에서는 트랜잭션 동기화를 위해 트랜잭션 동기화 매니저를 제공합니다. 트랜잭션 매니저는 DataSource 를 통해 데이터 베이스 Connection 을 생성하고 트랜잭션을 시작합니다. 트랜잭션 매니저는 트랜잭션이 시작된 Connection 을 트랜잭션 동기화 매니저에 저장합니다. Repository 는 트랜잭션 동기화 매니저에 저장된 Connection 을 사용합니다. 트랜잭션이 종료되면 트랜잭션 매니저는 트랜잭션 동기화 매니저에 저장된 Connection 을 통해 트랜잭션을 종료하고 Connection 을 닫습니다. TransactionSynchronizationManagerTransactionSynchronizationManager 는 ThreadLocal 을 사용해서 각 쓰레드별 데이터 베이스 Connection 을 저장하고 사용할 수 있도록 있습니다. TransactionSynchronizationManager 사용하기TransactionSynchronizationManager 에 저장된 Connection 을 가져오기 위해 DataSourceUtils 를 사용합니다. Connection getConnection(DataSource dataSource) DataSource 를 이용해 Database Connection 을 가져옵니다. Connection 이 없을 경우 생성하고 이미 있을 경우 ThreadLocal 에 저장된 Connection 을 가져옵니다. void releaseConnection(@Nullable Connection con, @Nullable DataSource dataSource) DataSource 에 연결된 Database Connection 을 닫습니다. 만약 해당 Connection 을 사용중인 프로세스가 있을 경우 닫지 않고 반환합니다.