minOS

예외와 트랜잭션 커밋,롤백-기본 본문

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