2016/08/05 18:03

@Transactional 을 통해 트랜젝션 처리방법 상세 Spring



트랜젝션 처리를 할 경우, 

1. schema 방식 ( AOP 이용)
2. Transactional Annotation 방식 을 이용하면 편리하다. 

그 중, transaction annotaion을 사용한 경우.. 
아무런 옵션을 넣지 않아도 commit/rollback 처리가 잘 된다. 

하지만, 
만약 내가 원하는 특정 Exception을 던지고 싶을 경우라면..
try ~ catch 를 통해 내가 원하는 별도 작업을 진행하고 싶다면.. 
그냥 해당 어노테이션 만으로는 안된다. 

위 해결을 위해서는 가장 쉽게는 두가지 방법이 있다. 

1. rollback시 처리할 exception을 지정해주는 방법. 
---------------
@Transactional(rollbackFor=BusinessException.class)
public int insertTest(Map<String, Object> commandMap) throws BusinessException {
int cnt1;
int cnt2;
try {
cnt1 = sampleDao.insertTest1(commandMap);
cnt2 = sampleDao.insertTest2(commandMap);
} catch (Exception e) {
throw new BusinessException(".........");
}
return 0;
}
---------------

2. catch 부분에서 직접 rollback 시키는 방법
---------------
public int insertTest(Map<String, Object> commandMap) throws BusinessException {
int cnt1;
int cnt2;
try {
cnt1 = sampleDao.insertTest1(commandMap);
cnt2 = sampleDao.insertTest2(commandMap);
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new BusinessException(".........");
}
return 0;
}
---------------

재밋는 부분을 발견했다. ㅎㅎ 
거 참.. 

http://m.blog.daum.net/jesuskim16/3721614 참고.. 




덧글

댓글 입력 영역