본문 바로가기

Spring Boot

Checked Exception에서 Transaction rollback시키기

@TransactionalChecked Exception이 터지면 rollback 시켜주지 않는다.
나는 어떤 Exception이 터지든 rollback시키고 싶었다.
물론 rollbackFor라는 옵션을 사용해서 rollback시킬 수 있지만,
나는 @Transactional(rollbackFor = Throwable.class)를 계속 쓰는 게 싫었다.
그러던 중 stackoverflow에서 관련 글을 확인할 수 있었다.
방법은 굉장히 간단하다.


package refill.station.config.annotation;

import org.springframework.transaction.annotation.Transactional;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(rollbackFor = Throwable.class)
public @interface TransactionalWithRollback {
}

위와 같이 @TransactionWithRollback이라는 annotation을 만들어서 사용하면,
@Transaction(rollbackFor = Throwable.class)가 자동으로 적용되게 된다.
이렇게 사용자 정의 annotation을 만들어서
어떤 경우든 Exception이 터지면 rollback이 되도록 하여 문제를 해결했다.

'Spring Boot' 카테고리의 다른 글

API 예외처리 공통화 1  (0) 2022.04.03
Slack에서 error log 알림받기(console 변동 X)  (0) 2022.03.11
SQL parameter 값 확인하기  (0) 2022.01.20
운영 yaml과 개발 yaml을 구분하기  (0) 2021.11.17
Spring Boot Project 생성  (0) 2021.10.22