보오오오통 @Transactional의 rollback이 UncheckedException에 반응한다는 부분은 모두가 아는 사실이다.
그럼 rollback()은 어떻게 진행되는가?
@Transactional에서 rollback()이 어떻게 동작하는가?
@Transactional의 docs를 따라가보면 TransactionAttribute, DefaultTransactionAttribute, RuleBasedTransactionAttribute를 확인할 수 있다.
TransactionAttribute (TranscationalDefinition)
아무래도 관심은 rollback이니까 rollbackOn(Throwable ex)를 중점으로 보자.
해당 rollbackOn()은 RuleBasedTransactionAttribute안의 rollbackOn()으로 실행된다.
RuleBasedTransactionAttribute.rollbackOn()을 확인해보면 안의 super.rollbackOn(ex);가 실행된다. 이때 불려지는 메소드가 DefaultTransactionAttribute의 rollbackOn()을 실행하게 된다.
위의 메소드를 확인하면 rollback on unchecked exception을 진행한다는 것을 확인 할 수 있다.
물론 try-catch로 unchecked exception을 잡아버리면 rollback이 이뤄지지 않고 commit을 진행해버린다.
이 부분은 주의가 필요할 듯하다.
'개발 > Spring' 카테고리의 다른 글
@Transactional에 대한 정리[번외] - RuntimeException와 Errorcode (0) | 2023.09.11 |
---|---|
@Transactional에 대한 정리[4] - rollbackFor(Class)에 관하여 (0) | 2023.09.11 |
@Transactional에 대한 정리[2] - (readOnly=true)에 관하여 (0) | 2023.09.11 |
@Transactional에 대한 정리 [1] (0) | 2023.09.11 |
[Spring Security] @Secured(ROLE_?) (0) | 2023.01.13 |