PROPAGATION_REQUIRES_NEW
및 PROPAGATION_NESTED
전파 정책 의 동작 차이를 이해할 수 없습니다 . 두 경우 모두 현재 프로세스가 롤백되지만 전체 트랜잭션이 아닌 것 같습니다. 단서가 있습니까?
PROPAGATION_REQUIRES_NEW
및 PROPAGATION_NESTED
전파 정책 의 동작 차이를 이해할 수 없습니다 . 두 경우 모두 현재 프로세스가 롤백되지만 전체 트랜잭션이 아닌 것 같습니다. 단서가 있습니까?
답변:
다음 링크를 참조하십시오. PROPAGATION_NESTED 대 PROPAGATION_REQUIRES_NEW? Juergen Hoeller는 그것을 아주 잘 설명합니다. - 스프링 소스 포럼은 완전히 오프라인 2019년 2월 28일 마부,하지만 당신은 아래의 인용문에서 기사의 관련 부분을 읽을 수 있습니다
PROPAGATION_REQUIRES_NEW는 주어진 범위에 대해 새롭고 독립적 인 "내부"트랜잭션을 시작합니다. 이 트랜잭션은 외부 트랜잭션과 완전히 독립적으로 커밋되거나 롤백되며 자체 격리 범위, 자체 잠금 집합 등이 있습니다. 외부 트랜잭션은 내부 트랜잭션이 시작될 때 일시 중단되고 내부 트랜잭션이 시작되면 다시 시작됩니다. 완료되었습니다. ...
반면에 PROPAGATION_NESTED는 기존 트랜잭션의 진정한 하위 트랜잭션 인 "중첩 된"트랜잭션을 시작합니다. 일어날 일은 중첩 된 트랜잭션이 시작될 때 세이브 포인트가 사용된다는 것입니다. 중첩 된 트랜잭션이 실패하면 해당 저장 점으로 롤백합니다. 중첩 트랜잭션은 외부 트랜잭션의 일부이므로 외부 트랜잭션이 끝날 때만 커밋됩니다. ...
PROPAGATION_REQUIRES_NEW : 영향을받는 각 트랜잭션 범위에 대해 완전히 독립적 인 트랜잭션을 사용합니다. 이 경우 기본 물리적 트랜잭션이 다르므로 내부 트랜잭션의 롤백 상태에 영향을받지 않는 외부 트랜잭션을 사용하여 독립적으로 커밋하거나 롤백 할 수 있습니다.
PROPAGATION_NESTED : 롤백 할 수있는 여러 세이브 포인트가있는 단일 물리적 트랜잭션을 사용합니다. 이러한 부분 롤백을 사용하면 내부 트랜잭션 범위가 해당 범위에 대한 롤백을 트리거 할 수 있으며, 일부 작업이 롤백 되었음에도 불구하고 외부 트랜잭션이 물리적 트랜잭션을 계속할 수 있습니다. 이 설정은 일반적으로 JDBC 저장 점에 매핑되므로 JDBC 리소스 트랜잭션에서만 작동합니다.
봄 문서 확인
PROPAGATION_REQUIRES_NEW
: 외부 트랜잭션은 내부 트랜잭션이 시작될 때 일시 중단되고 내부 트랜잭션이 완료되면 재개됩니다. 각 내부 트랜잭션이 완료되면 커밋 / 롤백됩니다. PROPAGATION_NESTED
: 중첩 된 트랜잭션은 외부 트랜잭션의 일부이므로 외부 트랜잭션이 끝날 때만 커밋됩니다.