Spring Boot
Checked Exception에서 Transaction rollback시키기
CodeMania
2022. 1. 19. 16:07
@Transactional은 Checked 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이 되도록 하여 문제를 해결했다.