[Spring] Transaction Propagation

Spring에서는 호출되는 메소드에 대한 트랜잭션 경계를 다음과 같이 지원한다.

1. MANDATORY :
    호출전에 트랜잭션이 반드시 존재해야 한다. 존재하지 않은경우 예외 방생

2. NESTED :
    호출되는 메소드에 이미 트랜잭션이 걸려 있는경우 중첩된 트랜잭션이 실행된다.
    중첩된 트랜잭션은 메인 트랜잭션에 독립적으로 Commit/Rollback 될 수 있다.
    메인 트랜잭션이 있는경우 --> 중첩 트랜잭션 생성
    메인 트랜잭션이 없는경우 --> REQUIRED와 동일하게 신규 생성함
    (# 참고 : 벤더 의존적, 지원안될 수 있음)

3. NEVER :
    트랜잭션이 없는 상태에서 메소드가 실행 되어야 한다.
    트랜잭션이 걸려 있다면 예외 발생.

4. SUPPORTED :
    트랜잭션이 없는 상황에서 실행되어야 한다.
    트랜잭션이 있다면, 트랜잭션이 종료될때까지 대기한다.

5. REQUIRED :
    트랜잭션 상황에서 실행 되어야한다.
    진행중인 트랜잭션이 있다면 진행중인 트랜잭션 내에서 실행된다.
    없다면 새로운 트랜잭션을 생성한다.

6. REQUIRED_NEW : 
    신규 트랜잭션 내에서만 실행이 되어야한다.
    이미 트랜잭션이 실행중이라면 종료될때 까지 대기한다.

7. SUPPORTS :
    진행중인 트랜잭션이 없어도 실행이 된다.
    진행중인 트랜잭션이 있다면 해당 트랜잭션 내에서 실행이 된다.

Share this

Related Posts

Previous
Next Post »