대개 Service layer에서, @Transactional 애노테이션을 붙여서 특정 메소드의 작업을 하나의 트랜잭션으로 처리하도록 할 수 있다.
이 때 한 @Transactional 메소드 내부에서 또 다른 @Transactional 메소드를 호출하면, 호출된(callee) 트랜잭션은 호출한(caller) 트랜잭션에 병합된다. 또한 호출된 트랜잭션을 수행하다가 에러가 발생했을 경우, 기본적으로 트랜잭션이 모두 rollback 처리 된다.
때에 따라서는 특정 트랜잭션은 rollback이 일어나지 않도록 하고 싶을 수도 있는데, 이 때 @Transactional의 'noRollbackFor' 라는 속성을 사용할 수 있다.
사용하는 방식은 다음과 같다.
@Transactional(noRollbackFor = { ExceptionA.class, ExceptionB.class })
public void insertItem() {
...
}
즉 noRollbackFor 속성에 정의한 Exception이 해당 트랜잭션 내부에서 발생할 경우, 진행한 부분까지 commit이 일어나며 rollback을 진행하지 않는다. 한 번에 여러 개의 Exception을 명시할 수 있고, 해당 Exception class는 Throwable의 서브클래스여야 한다.
'Spring Framework' 카테고리의 다른 글
[Spring/Testing] 단언문에 에러 메시지 포함하기 (0) | 2020.04.05 |
---|---|
Spring MVC — HandlerMethodArgumentResolver 사용하기 (0) | 2019.05.03 |
Validation(입력값 검증)의 최적의 장소는 어디일까? (0) | 2019.04.25 |
IoC / DI (1) | 2019.03.07 |
Spring MVC 동작원리 / 구성요소 (0) | 2019.03.07 |
댓글