스프링 트랜잭션 REQUIRES_NEW


스프링 트랜잭션 REQUIRES_NEW

트랜잭션 복구 Service A에서 RepositoryB와 Repository C를 호출한다고 가정해 보자. Repository B는 정상 작동했지만 Repository C는 예외가 발생한 상황이다. 우리가 원하는 건 Repository C에서 예외가 발생해도 Repository B를 호출하는 로직은 정상 작동하는 것이다. 간단하게 생각하면 Repository C에서 발생하는 예외를 Service A에서 try ~ catch로 잡아서 처리해 주면 될 것 같다. 하지만 이 방법은 실패를 하게 된다. 실패 이유 Repository C에서 예외가 발생하면 신규 트랜잭션이 아니기에 롤백은 하지 않지만 트랜잭션 동기화 매니저에 롤백을 한다고 표시하기 때문이다. 그렇기에 Service A에서 try ~ catch로 예외를 잡는다고 해도 Repository C에서 이미 롤백을 한다고 표시되었기 때문에 롤백을 하게 된다. 롤백을 하기에 전체 물리 트랜잭션 자체가 롤백이 된다. 해결 방법 위의 문제...


#REQUIRESNEW #스프링 #스프링트랜잭션 #트랜잭션

원문링크 : 스프링 트랜잭션 REQUIRES_NEW