프로그래밍/Spring

[Spring] Transaction marked as rollbackOnly

조쏘닉 2023. 9. 16. 00:30

스프링의 선언적 트랜잭션(@Transactional) 내부 메소드 내에서 예외를 잡아서 처리하는데 커밋될거라는 예상과 달리 Transaction marked as rollbackOnly 예외가 발생하면서 롤백되는 현상이 있었습니다.

 

상황 코드

@Service
@Transactional
public class AService {
    @Autowired
    private BService bService;

    public void test() {
        try {
            bService.runtimeExceptionTest();
        } catch (RuntimeException re) {
            log.warn("BService RuntimeException", re.getMessage());
        }	
    }
}

@Service
@Transactional
public class BService {
    public void runtimeExceptionTest() {
        throw new RuntimeException("TEST");
    }
}

예외잡는 부분까지 정상적으로 진행되나, 최초 트랜잭션이 종료되는 시점에 롤백 되네요.

 

기본 트랜잭션 옵션이 롤백이며 Checked Exception인 경우 롤백하지 않고, UnChecked Exception인 경우 롤백 하네요.

 

아래 참고 블로그에서 정말 정리가 잘되어있으니 자세한 내용은 해당 블로그에서 참고해주세요.

 

- 참고

https://techblog.woowahan.com/2606/