2021 Spring Study
Spring 15. Transaction Propagation
Yerim Kim
2021. 1. 21. 16:48
1. @Transactional(propagation = Propagation.REQUIRED)
아래 코드에서 SomeService의 some 메서드는 AnyService의 any 메서드를 호출한다.
그런데 some 메서드와 any 메서드 모두 @Transactional 어노테이션이 붙어있다.
public class SomeService {
private AnyService anyService;
public SomeService(AnyService anyService) {
this.anyService = anyService;
}
@Transactional
pblic void some() {
anyService.any();
}
}
public clas AnyService {
@Transactional
public void any() { ... }
}
@Transactional 의 propagation 속성은 기본값이 Propagation.REQUIRED 이다.
이 경우 현재 진행중인 트랜잭션이 존재하면 해당 트랜잭션을 사용하고, 존재하지 않으면 새로운 트랜잭션을 생성한다.
처음 some() 메서드를 호출하면 트랜잭션이 새로 시작된다. some() 메서드 내부에서 any() 메서드를 호출하면 이미 some() 메서드에 의해 시작된 트랜잭션이 존재하므로 any() 메서드를 호출하는 트랜잭션을 새로 생성하지 않는다. 대신 존재하는 트랜잭션을 그대로 사용한다.
즉 some() 과 any() 메서드를 한 트랜잭션으로 묶어서 실행하는 것이다.