예제 코드

GitHub - ljw1126/springtx at section11

일부 논리 트랜잭션이 실패한 경우

REQUIRES(기본)의 경우

Untitled

물리 트랜잭션은 여러 개의 논리 트랜잭션으로 구성된 상태이다. LogRepository에서 RuntimeException이 발생하게 되면

신규 트랜잭션이 아니므로 rollbackOnly=true설정 후 예외를 MemberService에 던지게 된다

Untitled

MemberService에서는 예외 처리 후 커밋 요청을 하게 되는데, 신규 트랜잭션이기 때문에 실제 물리 커밋을 실행하게 되고 이때 rollbackOnly 설정을 확인하게 된다

결과적으로 정상 흐름 처리를 해서 외부 트랜잭션(MemberService)에서 커밋을 호출해도 물리 트랜잭션은 롤백이 되고, UnexpectedRollbackReception을 반환한다

Untitled