스프링 트랜잭션 전파의 7가지 메커니즘

  • Spring 트랜잭션 전파 메커니즘에는 다음 7가지 유형이 포함됩니다.

1. Propagation.REQUIRED: 트랜잭션이 현재 존재하는 경우 트랜잭션에 참여하는 것을 의미하는 기본 트랜잭션 전파 수준입니다.

현재 트랜잭션이 없으면 새 트랜잭션을 만듭니다.

2. Propagation.SUPPORTS: 현재 거래가 있으면 조인, 현재 거래가 없으면 논트랜잭션 사용

모드는 계속 작동합니다.

3. Propagation.MANDATORY: (mandatory: Mandatory) 현재 트랜잭션이 있으면 트랜잭션에 참여합니다.

이전 트랜잭션이 없으면 예외가 발생합니다.

4. Propagation.REQUIRES_NEW: 새로운 트랜잭션을 생성하는 것을 의미하며, 현재 트랜잭션이 있으면 현재 트랜잭션을 중단합니다.

증가. 즉, 외부 메서드가 트랜잭션을 시작하는지 여부에 관계없이 Propagation.REQUIRES_NEW에 의해 수정된 내부 메서드는 자체 트랜잭션을 시작하고 열린 트랜잭션은 서로 독립적이며 서로 간섭하지 않습니다.

5. Propagation.NOT_SUPPORTED: 비트랜잭션 모드로 실행합니다. 현재 트랜잭션이 있으면 현재 트랜잭션을 일시 중단합니다.

6. Propagation.NEVER: 비트랜잭션 모드로 실행하고 현재 트랜잭션이 있는 경우 예외를 발생시킵니다.

7. Propagation.NESTED: 트랜잭션이 현재 존재하는 경우 현재 트랜잭션의 중첩된 트랜잭션으로 실행할 트랜잭션을 생성합니다.

현재 트랜잭션이 없는 경우 이 값은 PROPAGATION_REQUIRED와 동일합니다.

  • 위의 7가지 전파 동작은 현재 트랜잭션을 지원하는지 여부에 따라 다음 3가지 범주로 나눌 수 있습니다.

클래스 1: 현재 트랜잭션 지원

필수 (필수)

현재 메서드에 트랜잭션이 없으면 새 트랜잭션을 만들고, 이미 트랜잭션이 있으면 이 트랜잭션에 조인합니다.

[비슷한 부부관계 : 집이 있으면 동거하고, 집이 없으면 돈을 벌어 집을 산다. (고난을 견디기 위해 기꺼이 동행하고 싶지만 집이 있어야합니다)]

지원(가질 수 있음)

현재 트랜잭션을 지원합니다. 현재 트랜잭션이 없으면 비 트랜잭션 방식으로 실행됩니다.

[동거할 집이 있으면 집이 없으면 세를 빌릴 수 있다(집이 있으면 없어도 상관없다)]

필수 (필수)

현재 트랜잭션을 사용하거나 현재 트랜잭션이 없으면 예외를 발생시킵니다.

[집이 있으면 동거, 집이 없으면 헤어짐 (고생하지마, 집이 없으면 헤어짐)]

클래스 2: 현재 트랜잭션을 지원하지 않습니다.

REQUIRES_NEW

새 트랜잭션 실행을 생성하고 현재 트랜잭션이 있으면 현재 트랜잭션을 일시 중단합니다.

[네 집은 원하지 않아, 우리는 집을 사기 위해 함께 돈을 벌어야 한다. (당신은 당신의 집에 살 수 없습니다, 당신은 새 집을 사야 합니다)]

지원되지 않음

비트랜잭션 방식으로 작업을 수행하고 현재 트랜잭션이 있는 경우 현재 트랜잭션을 일시 중지합니다.

[네 집이 싫다, 같이 집을 빌려야 한다 (네 집에 살지 않으면 집을 빌려야 한다)]

절대

비트랜잭션 방식으로 실행되며 트랜잭션이 현재 존재하는 경우 예외가 발생합니다.

[꼭 세놓아야지, 집을 원하면 헤어져라 (같이 세내야지, 집이 있으면 헤어져야해-집이 마음에 안들어서, 대출금을 갚으려면 동행해야 한다)]

클래스 3: 중첩 트랜잭션

중첩됨

트랜잭션이 현재 존재하는 경우 중첩된 트랜잭션 내에서 실행됩니다. 현재 트랜잭션이 없으면 PROPAGATION_REQUIRED와 유사한 작업을 수행합니다.

[집이 있으면 그 집을 거점으로 소상공인 좀 하자. 돈을 벌면 계속 발전하는 것이 좋다. 집이 없어도 상관없어 같이 돈 벌어 집을 사자 (위험없이 창업, 자본금 아끼고 센스 있는 부부 되기)]

[참고: 여기서 "집"은 사업체를 의미합니다.]

중첩된 트랜잭션(NESTED)과 결합된 트랜잭션(REQUIRED)의 차이점:

  • 전체 트랜잭션이 성공적으로 실행되면 둘의 결과는 동일합니다.

  • 실행 중간에 트랜잭션이 실패하면 트랜잭션 조인 후 전체 트랜잭션이 롤백되지만 중첩된 트랜잭션은 영향을 주지 않고 부분적으로 롤백됩니다.

이전 메서드의 실행 결과를 에코합니다.

추천

출처blog.csdn.net/weixin_43637718/article/details/129339532