티스토리 뷰
목차
[자바 스프링 트랜잭션] 전파방식 7개 (Java Spring)
자바 스프링 1. PROPAGATION_MANDATORY
해당 메소드 호출 전에 반드시 진행 중인 트랜잭션이 존재해야 한다. 진행 중인 트랜잭션이 존재하지 않을 경우에는 예외가 발생한다.
자바 스프링 2. PROPAGATION_NESTED
이미 진행 중인 트랜잭션이 존재하면 해당 메소드는 중첩된 트랜잭션(NESTED TRANSACTION)에서 실행돼야 함을 나타낸다. 중첩된 트랜잭션은 둘러싼 트랜잭션(ENCLOSING TRANSACTION)과 독립적으로 커밋되거나 롤백될 수 있다.
[Java Spring] Transaction 전파방식
만약 둘러싼 트랜잭션이 없는 상황이라면 이는 PROPAGATION_REQUIRED와 동일하게 작동한다. 그러나 이 전파방식은 벤더 의존적이며 지원이 안 되는 경우도 많다. 관련 문서 등을 통해 중첩된 트랜잭션이 지원되는지 확인하라.
자바 스프링 3. PROPAGATION_NEVER
해당 메소드는 트랜잭션 진행상황에서 실행될 수 없다. 만약 이미 진행중인 트랜잭션이 존재하면 예외가 발생한다.
자바 스프링 4. PROPAGATION_NOT_SUPPORTED
해당 메소드는 트랜잭션이 없는 상황에서 실행된다. 만약 진행 중인 트랜잭션이 있다면 해당 메소드가 반환되기 전까지 잠시 중단된다. JTATransactionManager를 사용하는 경우에는 javax.transaction.TransactionManager에 대한 액세스가 요구된다.
[Java Spring] Transaction 전파방식
자바 스프링 5. PROPAGATION_REQUIRED
해당 메소드는 트랜잭션 상황에서 실행돼야 한다. 진행 중인 트랜잭션이 있으면 이 트랜잭션 상황에서 실행된다. 없는 경우에는 트랜잭션이 새로 시작된다.
자바 스프링 6. PROPAGATION_REQUIRES_NEW
해당 메소드는 자신만의 트랜잭션 상황에서 실행돼야 한다. 이미 진행중인 트랜잭션이 있으면 그 트랜잭션은 해당 메소드가 반환되기 전까지 잠시 중단된다.
만약 JTATransactionManager를 사용하는 경우에는 javax.transaction.TransactionManager에 대한 액세스가 요구된다.
[Java Spring] Transaction 전파방식
자바 스프링 7. PROPAGATION_SUPPORTS
해당 메소드는 진행 중인 트랜잭션이 없더라도 실행 가능하고, 트랜잭션이 있는 경우에는 이 트랜잭션 상황에서 실행된다. 예를 들어, 어떤 메소드가 PROPAGATION_REQUIRES_NEW로 선언되어 있다면 이는 메소드와 트랜잭션 경계가 일치함을 의미한다.
즉, 이 메소드가 시작할 때마다 새로운 트랜잭션이 시작되고, 메소드가 반환되거나 예외가 발생하면 트랜잭션이 종료된다.
만약 메소드가 PROPAGATION_REQUIRED로 선언되어 있다면, 실질적인 트랜잭션 경계는 이미 진행 중인 트랜잭션의 존재 여부에 따라 달라진다.
출처 : 스프링 인 액션 3판, 크레이그 월즈, 홍영표역
[자바 스프링 트랜잭션] 전파방식 7개 (Java Spring)