2017-10-26 3 views
1

두 개의 트랜잭션이 있고 내부 트랜잭션 전파가 REQUIRES_NEW라고 가정합니다.Sprint 트랜잭션 - 내부 트랜잭션이 실패 할 경우 REQUIRES_NEW 동작

그래서 트랜잭션 X에서 실행중인 첫 번째 트랜잭션과 두 번째 트랜잭션은 새 트랜잭션을 만듭니다. 내부 트랜잭션이 실패하면 외부 트랜잭션도 실패합니까? 내부 트랜잭션 만 실패하여 외부 트랜잭션이 성공하게됩니다.

아무도 위의 시나리오에서 동작을 설명해 주시겠습니까?

감사!

답변

2

중첩 된 트랜잭션이 아닌 별도의 트랜잭션 (내부 트랜잭션이 실행되는 동안 외부 트랜잭션이 일시 중단됨)입니다. 내부 트랜잭션이 실패하면 롤백됩니다. 해당 예외를 표시하지 않으려면을 선택하면 외부 트랜잭션이 성공할 수 있습니다 ().

+0

감사합니다. @Kayaman. 따라서 내부 트랜잭션 실패 예외를 억제하지 않으면 트랜잭션도 실패합니다. 이게 옳은 거니? –

+0

정확히 말하자면, 보통 주위에'catch (Exception) '이 없으므로 정상적인 경우 두 트랜잭션 모두 실패합니다. 그래도 예외를 쉽게 잡을 수 있습니다. 예를 들어 실패하면 재 시도 할 수 있습니다 (다시 시도하는 것이 좋습니다). – Kayaman

+0

내부 트랜잭션에 대한 예외 처리를 추가 할 수있는 방법이 있습니까? 그렇지 않으면 내부 트랜잭션이 실패하면 외부 트랜잭션 채우기가 항상 실패합니다. 권리? –