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와 동일합니다.
![](https://img-blog.csdnimg.cn/img_convert/87e37c5d6cf3ac2c063a0c74b93d6104.png)
위의 7가지 전파 동작은 현재 트랜잭션을 지원하는지 여부에 따라 다음 3가지 범주로 나눌 수 있습니다.
클래스 1: 현재 트랜잭션 지원
필수 (필수)
현재 메서드에 트랜잭션이 없으면 새 트랜잭션을 만들고, 이미 트랜잭션이 있으면 이 트랜잭션에 조인합니다.
[비슷한 부부관계 : 집이 있으면 동거하고, 집이 없으면 돈을 벌어 집을 산다. (고난을 견디기 위해 기꺼이 동행하고 싶지만 집이 있어야합니다)]
지원(가질 수 있음)
현재 트랜잭션을 지원합니다. 현재 트랜잭션이 없으면 비 트랜잭션 방식으로 실행됩니다.
[동거할 집이 있으면 집이 없으면 세를 빌릴 수 있다(집이 있으면 없어도 상관없다)]
필수 (필수)
현재 트랜잭션을 사용하거나 현재 트랜잭션이 없으면 예외를 발생시킵니다.
[집이 있으면 동거, 집이 없으면 헤어짐 (고생하지마, 집이 없으면 헤어짐)]
클래스 2: 현재 트랜잭션을 지원하지 않습니다.
REQUIRES_NEW
새 트랜잭션 실행을 생성하고 현재 트랜잭션이 있으면 현재 트랜잭션을 일시 중단합니다.
[네 집은 원하지 않아, 우리는 집을 사기 위해 함께 돈을 벌어야 한다. (당신은 당신의 집에 살 수 없습니다, 당신은 새 집을 사야 합니다)]
지원되지 않음
비트랜잭션 방식으로 작업을 수행하고 현재 트랜잭션이 있는 경우 현재 트랜잭션을 일시 중지합니다.
[네 집이 싫다, 같이 집을 빌려야 한다 (네 집에 살지 않으면 집을 빌려야 한다)]
절대
비트랜잭션 방식으로 실행되며 트랜잭션이 현재 존재하는 경우 예외가 발생합니다.
[꼭 세놓아야지, 집을 원하면 헤어져라 (같이 세내야지, 집이 있으면 헤어져야해-집이 마음에 안들어서, 대출금을 갚으려면 동행해야 한다)]
클래스 3: 중첩 트랜잭션
중첩됨
트랜잭션이 현재 존재하는 경우 중첩된 트랜잭션 내에서 실행됩니다. 현재 트랜잭션이 없으면 PROPAGATION_REQUIRED와 유사한 작업을 수행합니다.
[집이 있으면 그 집을 거점으로 소상공인 좀 하자. 돈을 벌면 계속 발전하는 것이 좋다. 집이 없어도 상관없어 같이 돈 벌어 집을 사자 (위험없이 창업, 자본금 아끼고 센스 있는 부부 되기)]
[참고: 여기서 "집"은 사업체를 의미합니다.]
중첩된 트랜잭션(NESTED)과 결합된 트랜잭션(REQUIRED)의 차이점:
전체 트랜잭션이 성공적으로 실행되면 둘의 결과는 동일합니다.
실행 중간에 트랜잭션이 실패하면 트랜잭션 조인 후 전체 트랜잭션이 롤백되지만 중첩된 트랜잭션은 영향을 주지 않고 부분적으로 롤백됩니다.
이전 메서드의 실행 결과를 에코합니다.