TIL/김영한의 스프링 DB 2편
예외와 트랜잭션 커밋,롤백-기본
minOE
2025. 3. 3. 22:55
728x90
예외와 트랜잭션 커밋,롤백
package com.example.springtx.exception; import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.transaction.annotation.Transactional; @SpringBootTest public class RollbackTest { @Autowired RollbackService rollbackService; @Test void runtimeException() { Assertions.assertThatThrownBy(()->rollbackService.runtimeException()) .isInstanceOf(RuntimeException.class); } @Test void checkedException(){ Assertions.assertThatThrownBy(()->rollbackService.checkedException()) .isInstanceOf(MyException.class); } @Test void rollbackFor(){ Assertions.assertThatThrownBy(()->rollbackService.rollbackFor()) .isInstanceOf(MyException.class); } @TestConfiguration static class RollbackTesConfig { @Bean RollbackService rollbackService() { return new RollbackService(); } } @Slf4j static class RollbackService { // 런타임 예외 발생 : 롤백 @Transactional public void runtimeException() { log.info("call runtimeException"); throw new RuntimeException(); } // 체크 예외 발생 : 커밋 @Transactional public void checkedException() throws MyException { log.info("call checkedExcption"); throw new MyException(); } // 체크 예외 rollbackFor 지정 : 롤백 @Transactional(rollbackFor = MyException.class) public void rollbackFor() throws MyException { log.info("call checkedExcption"); throw new MyException(); } } static class MyException extends Exception { } }
런타임 예외 테스트 -> 롤백
체크 예외 테스트 -> 커밋
체크 예외를 강제로 롤백 -> 롤백
728x90


