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를 가장 많이 사용
반응형