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 |