Transaction 동기화

무지성개발자·2023년 10월 8일
0

Transaction 동기화

트랜잭션 작업을 수행할 때 또 다른 트랜잭션 작업이 필요한 메서드를 호출했을 때, 기존 트랜잭션 작업에 포함시켜 하나의 트랜잭션으로 작업하는 것을 트랜잭션 동기화라고 한다.

트랜잭션 동기화 해보기

  • transTest()메서드는 트랜잭션 작업을 수행한다.
  • updateTable2()메소드는 @Transactionl을 사용하고 있어서 transTest()메서드의 트랜잭션 작업에 참여여 해야한다.

트랜잭션을 동기화는 하나의 커낵션으로 작업을 해야하니 ThreadLocal에 트랜잭션 정보를 저장하여 사용한다.

트랜잭션 정보를 저장하는 과정은 다음과 같다.

  • DataSourceTransactionManager의 doBegin() 메소드에서 트랜잭션을 시작
  • TransactionSynchronizationManager의 bindResource()메서드에서 ThreadLocal에 트랜잭션 정보를 저장.
  • AbstractPlatformTransactionManager의 getTransaction()을 통해 트랜잭션 정보를 가져와서 작업.
    • DataSourceTransactionManager의 doGetTransaction()
    • TransactionSynchronizationManager의 getResource()
    • 순서로 정보를 가져옴.

트랜잭션 전파 옵션을 통해 트랜잭션 동기화 여부를 결정하는 곳은 AbstractPlatformTransactionManager의 getTransaction()의 메소드를 보면 트랜잭션 전파 옵션을 분기하는 코드가 있다.


한 줄평 : 처음 트랜잭션을 시작 할 때 getTrnasaction()에서 정보가 없으면 doBegin()을 실행하여 트랜잭션을 새로 만든다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글