복붙노트

[SPRING] Spring 트랜잭션에서 requires_new와 nested propagation 사이의 차이점

SPRING

Spring 트랜잭션에서 requires_new와 nested propagation 사이의 차이점

PROPAGATION_REQUIRES_NEW 및 PROPAGATION_NESTED 전파 정책 간의 동작 차이를 이해할 수 없습니다. 두 경우 모두 현재 프로세스가 롤백되지만 전체 트랜잭션이 아닌 것으로 보입니다. 어떤 단서?

해결법

  1. ==============================

    1.이 링크 참조 : PROPAGATION_NESTED 대 PROPAGATION_REQUIRES_NEW? Juergen Hoeller가 아주 잘 설명해줍니다.

    이 링크 참조 : PROPAGATION_NESTED 대 PROPAGATION_REQUIRES_NEW? Juergen Hoeller가 아주 잘 설명해줍니다.

  2. ==============================

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

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

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

    스프링 문서 확인

  3. ==============================

    3.차이점을 찾아주세요.

    차이점을 찾아주세요.

    1.) Use of NESTED Transaction
    

    현재 트랜잭션이 존재하면 중첩 된 트랜잭션 내에서 실행하고, 그렇지 않으면 PROPAGATION_REQUIRED처럼 동작하십시오. 중첩 된 트랜잭션은 Spring에 의해 지원됩니다.

    2.) REQUIRED 거래의 사용 현재 트랜잭션을 지원하고 존재하지 않으면 새 트랜잭션을 작성하십시오. . 은행 계좌를 인출, 입금, 거래 갱신과 같은 의미

    3.) REQUIRES_NEW 거래의 사용 새 트랜잭션을 작성하고 현재 트랜잭션을 일시 중단하십시오.

  4. from https://stackoverflow.com/questions/12390888/differences-between-requires-new-and-nested-propagation-in-spring-transactions by cc-by-sa and MIT license