IT/Java
@Transactional 사용시 주의 사항4 (propagation(전파속성) 에 대해)
성준하이
2023. 11. 14. 08:28
반응형
이전 포스팅에서 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
반응형