전파레벨 !
그냥 바로 설명 들어갑니다.
@Transactional(propagation = Propagation.REQUIRED)
public void required() {
...
}
Propagation의 기본값이다.
부모 트랜잭션 안에서 실행하고, 부모 트랜잭션이 없을 때는 새로운 트랜잭션을 생성한다.예외가 발생하면 RollBack ! 호출 한 곳에도 RollBack 이 전파된다.
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void requiresNew() {
...
}
매번 새로운 트랜잭션을 실행한다.
( 새로운 연결을 생성하고 실행 )호출한 곳에서 이미 트랜잭션이 설정 되어 있다면,
기존의 트랜잭션은 메소드가 종료될때까지 잠시 대기!
자신의 트랜잭션을 실행합니다.
( 부모 트랜잭션과 상관이 없다. )즉, 2개의 트랜잭션이 완전 독립적으로 Act.
@Transactional(propagation = Propagation.NESTED)
public void nested() {
...
}
해당 메소드가 부모 트랜잭션에서 진행될 경우 별개로 Commit 되거나 RollBack 될 수 있다.
만약, 둘러싼 부모 트랜잭션이 없을 경우
Propagation.REQUIRED 와 동일하게 Act.Diff >> SavePoint를 지정한 시점까지 부분 RollBack이 가능
( DB가 SavePoint 기능을 지원해야함 )