@Transactional의 전파레벨(Propagation)

dev-well-being·2023년 9월 1일
1
post-thumbnail

Propagation

  • 현재 진행중인 트랜잭션(부모 트랜잭션)이 존재할 때 새로운 트랜잭션 메소드를 호출하는 경우 어떤 정책을 사용할 지에 대한 정의입니다.

  • 예를 들어, 기존 트랜잭션에 참여해서 그래도 이어갈 수도 있고, 새로운 트랜잭션을 생성할 수도 있으며 no-transactional 상태로 실행할 수 있다.

    • no-transactional은 트랜잭션은 존재하지만 커밋, 롤백이 되지 않는 상태이다.

Propagation 옵션

REQUIRED

  • 기본값이며 부모 트랜잭션이 존재할 경우 참여하고 없는 경우 새 트랜잭션을 시작

SUPPORTS

  • 부모 트랜잭션이 존재할 경우 참여하고 없는 경우 non-transactional 상태로 실행

MANDATORY

  • 부모 트랜잭션이 있으면 참여하고 없으면 예외 발생

REQUIRES_NEW

  • 부모 트랜잭션을 무시하고 무조건 새로운 트랜잭션이 생성

NOT_SUPPORTED

  • non-transactional 상태로 실행하며 부모 트랜잭션이 존재하는 경우 일시 정지시킴

NEVER

  • non-transactional 상태로 실행하여 부모 트랜잭션이 존재하는 경우 예외 발생

NESTED

  • 부모 트랜잭션과는 별개의 중첩된 트랜잭션을 만듬
  • 부모 트랜잭션의 커밋과 롤백에는 영향을 받지만 자신의 커밋과 롤백은 부모 트랜잭션에게 영향을 주지 않음
  • 부모 트랜잭션이 없는 경우 새로운 트랜잭션을 만듬(REQUIRED와 동일)
  • DB가 SAVEPOINT를 지원해야 사용 가능(Oracle)
  • JpaTransactionManager에서는 지원하지 않음

참고자료

profile
안녕하세요!! 좋은 개발 문화를 위해 노력하는 dev-well-being 입니다.

0개의 댓글