본문 바로가기
IT/Java

@Transactional 사용시 주의 사항4 (propagation(전파속성) 에 대해)

by 성준하이 2023. 11. 14.
반응형

이전 포스팅에서 Transactional  annotation 설명 시 propagation에 대해 다룬적이 있다.

간단히 언급만 되었어서 자세하게 하나하나 설명이 들어갈 포스팅이다.

 

사용법은 아래와 같다.

@Transactional(propagation = 아래 속성)

속성 설명 비고
Propagation.REQUIRED 따로 지정을 해주지 않으면 default
부모 트랜잭션 내에서 실행하며 부모가 없으면 새롭게 생성을 하여 자신이 부모가 된다.
예외발생시 예외가 전파되며 상위로 올린다.
 
Propagation.REQUIRES_NEW 실행할때 새롭게 Transactional 을 생성한다.
기존에 부모 Transactional 로 묶여있더라도 별개로 작동하여 부모와는 무관하게 돌아간다.
예외 발생해도 상위 부모에 전파가 되지 않는다.
기존 부모 Transaction은 해당 Transaction이 종료될때까지 대기한다.
 
Propagation.NESTED 해당 메서드는 부모Transaction에서 진행되면 별개로 commit/rollback가능하다.
savepoint가 지정된곳으로 롤백가능
부모가 없다면 default 와 동일한 메서드이다.
진행중인 transaction이 있다면 중첩으로 진행된다.
 
Propagation.MANDATORY 항상 부모 트랜잭션 내에서만 실행이 되고 그렇지 않으면 Exception 발생  
Propagation.SUPPORT MANDATORY와 비슷하게 부모 내에서만 작동을 하고 그렇지 않으면 에러가 아니라 non-transactional 하게 동작한다.  
Propagation.NOT_SUPPORT non-transactional로 실행되며 부모 Transaction이 존재하면 잠시 정지한다.  
Propagation.NEVER NOT_SUPPORT와 비슷하며 non-transactional로 실행되며 부모 Transaction이 존재하면 Exception 발생한다.  

참고 포스팅

https://thenicesj.tistory.com/619

 

@Transactional annotation

spring에서 사용하는 annotation 중 하나인 이 Transactional annotation에 대해 소개하려고 한다. 사용은 메서드 상단에 설정을 해준다. 예제는 아래와 같다. @Transactional public void interal() { serviceA.transactionalTe

thenicesj.tistory.com

 

반응형

댓글