카테고리 없음
Transaction
계속까먹어
2022. 4. 23. 16:28
상당히 헷갈렸었는데 요번에 배치를 구현하면서 정립했다
물론 시스템 아키텍쳐가 어떤식으로 구현했냐에 따라 다르겠지만
AOP방식과 @Transactional이라는 두가지로 구분가능한걸로 알고있다
저번에 했던 프로젝트는 AOP방식이다
SQL Tool을 사용할때 AUTO COMMIT을 해제한 상태로 생각하면 편하다
Step이나 Service를 완료시점에서 UnChecked Exception이
발현되지 않았을 경우에 Commit이 된다
물론 중간에 트랜잭션을 분리한다거나 하는 경우에는
transactionTemplate.execute(new TransactionCallback<>() {
@Override
public Object doInTransaction(TransactionStatus status) {
try {
...
}
catch(Exception e) {
...
status.setRollbackOnly();
}
}
});
해당 구문으로 사용했다 try~catch로 Rollback을 따로 해야하지만
내가 생각하기에는 보통 Sql Exception이
나온시점에는 단건으로 이루어진 대부분의 쿼리에서
DML 오류이기때문에 Rollback을 굳이 할 이유는
없어보인다
Rollback이 필요한 시점에는 RuntimeException을 상속받은 프로젝트 내의 Exception을 사용하여 처리했다