@Transactional에 대한 정리[3] - rollback()에 관하여
보오오오통 @Transactional의 rollback이 UncheckedException에 반응한다는 부분은 모두가 아는 사실이다.
그럼 rollback()은 어떻게 진행되는가?
@Transactional에서 rollback()이 어떻게 동작하는가?
@Transactional의 docs를 따라가보면 TransactionAttribute, DefaultTransactionAttribute, RuleBasedTransactionAttribute를 확인할 수 있다.
TransactionAttribute (TranscationalDefinition)
TransactionDefinition (Spring Framework 6.0.11 API)
Support a current transaction; execute non-transactionally if none exists. Analogous to the EJB transaction attribute of the same name. NOTE: For transaction managers with transaction synchronization, PROPAGATION_SUPPORTS is slightly different from no tran
docs.spring.io
아무래도 관심은 rollback이니까 rollbackOn(Throwable ex)를 중점으로 보자.
해당 rollbackOn()은 RuleBasedTransactionAttribute안의 rollbackOn()으로 실행된다.
RuleBasedTransactionAttribute.rollbackOn()을 확인해보면 안의 super.rollbackOn(ex);가 실행된다. 이때 불려지는 메소드가 DefaultTransactionAttribute의 rollbackOn()을 실행하게 된다.
위의 메소드를 확인하면 rollback on unchecked exception을 진행한다는 것을 확인 할 수 있다.
물론 try-catch로 unchecked exception을 잡아버리면 rollback이 이뤄지지 않고 commit을 진행해버린다.
이 부분은 주의가 필요할 듯하다.