IT/개발

[SpringBoot] Transaction 사용하기

Terriermon 2021. 9. 24. 12:25

Transaction

 

sql 실행 시, 하나의 단위로 묶어서 처리하는 방법

ex) 티켓을 구매하기 위해서 A(티켓수) sql과 B(사람수) sql이 모두 실행되어야 성공일 때 A와 B는 하나의 트랜잭션 안에서 실행됨 ▶️ A 또는 B 실패 시 두 sql 실행X

 

 

TransactionTemplate

 

SpringBoot에서 사용하는 Trasaction


//transation
@Autowired
TranactionTemplate transactionTemplate;


public void outTransaction(){
    try{
        transactionTemplate.execute(new TransactionCallbackWithoutResult(){

            @Override
            protected void doInTransactionWithoutResult(TransactionStatus arg0){
                // C sql
                inTransaction();
            }
        });
    } catch(Exception e){
        //error
    }
}


// 전파 속성 설정
//REQUIRES_NEW 대신 위 표의 내용으로 속성 지정 가능
@Transactional(propagation=propagation.REQUIREDS_NEW)
public void inTransaction(){
    try{
        transactionTemplate.execute(new TransactionCallbackWithoutResult(){

            @Override
            protected void doInTransactionWithoutResult(TransactionStatus arg0){
                // A sql
                // B sql
            }
        });
    } catch(Exception e){
        //error
    }
}

- transactionTemplate 내부에서 sql을 실행

- A 또는 B sql에서 오류가 발생하면 inTransaction Rollback

 

 

Propagation

 

전파 속성, outTransaction 안에서 inTransaction이 중첩되어 실행 될 때, 각각 어떻게 영향을 줄 것인지 속성 정의

required (0) Default, 포함
ex) inTransaction에서 오류 발생 시 outTransaction도 실행X
supports (1) 기존 트랜잭션에 의존
mandatory (2) 트랜잭션에 반드시 포함
트랜잭션이 있는 곳에서 호출
requireds_new (3) 각각 트랜잭션 처리
ex) inTransation이 오류가 나도 outTranssation은 정상 처리 가능
not_supported (4) 트랜잭션에 포함하지 않음
기존 트랜잭션 존재 시, 일시중지 후 메소드 실행이 끝난 다음에 트랜잭션을 진행
never (5) 트랜잭션에 절대 포함하지 않음
트랜잭션이 있는 곳에서 호출 시 에러 발생

- required나 requireds_new를 가장 많이 사용

 

 

'IT > 개발' 카테고리의 다른 글

[Spring] JPA란  (0) 2021.10.29
[Spring] Spring Cloud 개념 및 핵심 컴포넌트  (0) 2021.10.01
[SpringBoot] MyBatis 간단 기초  (0) 2021.09.22
[SpringBoot] 백엔드에서 Form 데이터 받기  (0) 2021.09.21
[SpringBoot] DI(의존성 주입)  (0) 2021.09.19