개발정리

스프링 - 트랜잭션 전파속성 문서 읽기 본문

스프링/스프링 프레임워크

스프링 - 트랜잭션 전파속성 문서 읽기

coffee. 2024. 4. 12. 16:09

Transaction Propagation

  • 이 장은 스프링에서 트랜잭션 전파의 몇가지 의미를 묘사합니다.
  • 이 장은 트랜잭션 전파의 적절한 소개는 아닙니다.
  • 꽤, 이것은 스프링에서의 트랜잭션 전파에 관한 디테일한 의미 입니다.
  • 스프링이 관리하는 트랜잭션들에서,물리적 트랜잭션과 논리적 트랜잭션 사이의 차이와 어떻게 이 차이에서 전파가 적용이 되는지 알아야 합니다.

REQUIRED 전파의 이해

  • PROPAGATION_REQUIRED 는 물리적 트랜잭션을 강제합니다.
  • 현재 스코프의 근처에 아직 트랜잭션이 없거나 더 넓은 영역에 정의된 이미 존재하는 바깥쪽 트랜잭션에 참여합니다.
  • 이것은 좋은 디폴트 값 입니다. 같은 쓰레드 안에 있는 일반적인 콜 스택 에서

디폴트 값으로, 참여하는 트랜잭션은 합쳐집니다 바깥쪽 스코프의 특성에 그리고 조용히 지역 격리 레벨과 타임 아웃 값 또는 readOnly 플래그를 무시함니다.
validateExistingTransactions플래그를 true로 변환하는 것을 고려해 보세요 당신의 트랜잭션 매니저 에서 만약 당신이 원한다면 격리 수준 선언이 거절 되기를 이미 존재하는 트랜잭션에 참여할때 다른 격리 수준과 함께. 이러한 non-lenient mode (관대하지 않은 모드)는 또한 거절합니다 read-only 부조화를
(안쪽의 읽고-쓰는 트랜잭션 이 바깥쪽의 read-only 트랜잭션에 참여하려고 시도할때)

  • 전파 속성이 PROPAGATION_REQUIRED로 세팅 되었을때, 논리적 트랜잭션 스코프는 생성 됩니다.각각의 메소드 위에 세팅이 적용된. 각각의 이러한 논리적 트랜잭션 스코프는 결정 할 수 있습니다. rollback-only 상태를 개인적으로, 바깥쪽 트랜잭션 스코프가 내부 트랜잭션 스코프와 논리적으로 독립적인 경우.
    일반적인 상황의 PROPAGATION_REQUIRED 행동에서, 모든 이러한 스코프 들은 매핑 됩니다. 같은 물리적인 트랜잭션으로. 그래서 안쪽 트랜잭션 스코프 의 rollback-only 마커는 영향을 미칩니다 바깥쪽 트랜잭션의 실제로 커밋할 기회에
  • 하지만, 안쪽 트랜잭션 스코프 가 rollback-only 로 설정된 경우, 바깥쪽 트랜잭션은 결정 하지 않았습니다 롤백에 대해 스스로, 그래서 rollback은 예측 되지 않습니다.이러한 경우에는 UnexpectedRollbackException에 상응하는 예외가 발생합니다.이것은 예측되는 행동입니다 트랜잭션의 호출자가 절대 잘못 인도 하지 않도록 커밋이 수행되지 않은 경우에 수행된것으로
    그래서 만약 안쪽 트랜잭션이 조용하게 트랜잭션을 rollback-only로 마크 한다면 바깥쪽 호출자는 여전히 commit을 호출 합니다.바깥쪽 호출자는 필요합니다 UnexpectedRollbackException을 받도록 명확하게 나타내기 위해서 rollback이 수행되었다는 것을

REQUIRES_NEW 전파의 이해

  • PROPAGATION_REQUIRED와 대조적으로 PROPAGATION_REQUIRES_NEW는 항상 사용합니다. 독립적인 물리적 트랜잭션을 각각의 트랜잭션 스코프에 영향을 미치는 절대 참여하지 않습니다 이미 존재하는 트랜잭션에 바깥쪽 스코프를 위해
    이러한 방식에서, 중요한 자원 트랜잭션들은 다름니다 그리고 독립적으로 커밋이나 롤백을 할 수 있습니다.
    바깥쪽 트랜잭션이 영향을 받지 않습니다 안쪽의 트랜잭션 롤백 상태에 의해 그리고 안쪽 트랜잭션의 락들은 즉시 해재됩니다 작업이 끝난 이후에 이러한 독립적인 안쪽 트랜잭션은 선언할 수 있습니다 이것 만의 격리 수준,타임아웃,그리고 read-only 설정을 그리고 물려받지 않습니다 바깥쪽 트랜잭션의 특성을

NESTED 전파의 이해

  • PROPAGATION_NESTED는 사용합니다 하나의 물리적 트랜잭션을 여러개의 롤백 가능한 세이브 포인트와 함께 이러한 부분 롤백들은 안쪽 트랜잭션 스코프를 롤백이 작용하도록 하며,바깥쪽 트랜잭션은 물리적 트랜잭션을 지속하도록 합니다 몇몇의 작동들이 롤백 됬음에도 불구하고 이 세팅은 전형적으로 JDBC의 세이브 포인트들과 매핑 됩니다. 그러므로 이것은 오직 JDBC 자원 트랜잭션 에만 작동합니다.

참조