다양한 전파 옵션에 대해 알아보겠다.
보통 REQUIRED를 기본으로 쓰고, 아주 가끔 REQUIRES_NEW를 쓴다.
REQUIRED
기존 트랜잭션에 참여
없으면 새로 생성
REQUIRES_NEW
항상 새 트랜잭션을 생성.
SUPPORT
기존 트랜잭션 있으면 참여
없으면 아예 트랜잭션 없이 진행
말 그대로 지원 정도
NOT_SUPPORT
기존 트랜잭션 있을 시에도 트랜잭션 없이 진행하되, 기존 트랜잭션은 보류시킴. suspend 그거 인 듯
없을 시 그냥 트랜잭션 없이 진행
MANDATORY
기존 트랜잭션에 참여한다.
없으면 예외 발생. IllegalTransactionStateException
의무적인, 이란 뜻으로 반드시 트랜잭션이 있어야 한다.
NEVER
기존 트랜잭션 있으면 예외 발생
없을 시 그냥 트랜잭션 없이 진행
이름 그대로 절대 트랜잭션이 있어선 안됨.
NESTED
기존 트랜잭션 있을 시 중첩 트랜잭션을 만듦.
없을 시 새 트랜잭션을 생성.
중첩 트랜잭션은 REQUIRED랑 약간 다른 게, 얘는 rollback되어도 외부 트랜잭션은 Commit 가능 함.
이건 DB드라이버에서 JDBC 세이브 포인트 기능을 지원해야 하며, 현재 JPA에서는 지원 안한다.
isolation, timeout, readOnly 등의 옵션은 처음의 트랜잭션만, 그러니까 외부트랜잭션이거나 REQUIRES_NEW인 것들만 적용이 된다.
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
55. 트랜잭션 전파 활용 2 (0) | 2023.10.17 |
---|---|
54. 트랜잭션 전파 활용 1 (0) | 2023.10.17 |
52. 트랜잭션 전파 5 (0) | 2023.10.16 |
51. 트랜잭션 전파 4 (0) | 2023.10.16 |
50. 트랜잭션 전파 3 (0) | 2023.10.16 |