ProgramingTip

Spring 트랜잭션에서 requires_new와 중첩 된 전파의 차이점

bestdevel 2020. 11. 8. 10:40
반응형

Spring 트랜잭션에서 requires_new와 중첩 된 전파의 차이점


전파 정책 PROPAGATION_REQUIRES_NEWPROPAGATION_NESTED전파 정책 의 동작 차이는 없습니다 . 두 경우 모두 현재 프로세스가 롤백 전체 트랜잭션이 아닌 것입니다. 단서가 있습니까?


다음 링크를 참조하십시오. PROPAGATION_NESTED 대 PROPAGATION_REQUIRES_NEW? Juergen Hoeller는 그것을 아주 잘 설명합니다.

PROPAGATION_REQUIRES_NEW는 주어진 범위에 대해 새롭고 독립적 인 "내부"트랜잭션을 시작합니다. 이 트랜잭션은 외부 트랜잭션과 완전히 제거되어 커밋되거나 롤백 자체 격리 범위, 자체 잠금 집합 등이 있습니다. 외부 트랜잭션은 내부 트랜잭션이 시작될 때 일시 중단되고 내부 트랜잭션이 시작될 다시 시작됩니다. 완료되었습니다. ...

반면 PROPAGATION_NESTED는 기존 트랜잭션의 진정한 하위 트랜잭션 인 "중첩 된"트랜잭션을 시작합니다. 중단 될 때 중첩 된 트랜잭션이 시작될 때 발생하는 것입니다. 중첩 된 트랜잭션이 실패하면 해당 저장 점으로 롤백합니다. 중첩 트랜잭션은 외부 트랜잭션의 일부 외부 트랜잭션이 끝날 때만 커밋됩니다. ...


PROPAGATION_REQUIRES_NEW : 영향을받는 각 트랜잭션 범위가 완전히 독립된 트랜잭션을 사용합니다. 이 경우 내부 기본 물리적 트랜잭션이 다르 밋 내부 트랜잭션의 롤백 상태에 영향을받지 않는 외부 트랜잭션을 사용하여 독립적으로 커밋되지 않거나 롤백 할 수 있습니다.

PROPAGATION_NESTED : 롤백 할 수있는 여러 세이브 포인트가있는 단일 물리적 이미지를 사용합니다. 부분적인 부분 롤백을 사용하면 내부 트랜잭션 범위가 해당 범위에 대한 롤백을 트리거 할 수 있고 일부 작업이 롤백 되었음에도 불구하고 외부 트랜잭션이 물리적 트랜잭션을 계속할 수 있습니다. 이 설정은 일반적으로 JDBC 저장 점에 매핑 된 JDBC 리소스 트랜잭션에서만 작동합니다.

봄 문서 확인


차이점을 찾아주세요

1.) Use of NESTED Transaction

현재 트랜잭션이있는 경우 중첩 된 트랜잭션 내에서 실행하고, PROPAGATION_REQUIRED처럼 동작합니다. 중첩 트랜잭션은 Spring에서 지원합니다.

2.) REQUIRED Transaction 사용 현재 트랜잭션을 지원하고, 존재하지 새 트랜잭션을 만듭니다. . 인출, 입금, 거래 업데이트와 같은 뱅킹 도메인을 의미합니다.

3.) REQUIRES_NEW 트랜잭션 사용 새 트랜잭션을 생성하고 현재 트랜잭션이있는 경우 일시 중지합니다.

참고 URL : https://stackoverflow.com/questions/12390888/differences-between-requires-new-and-nested-propagation-in-spring-transactions

반응형