- Transactional
- 하나의 작업을 수행하기 위해 여러 개의 세부 작업을 수행해야 한다면, 여기서 한 세부 작업이라도 실패한다면, 이전에 실행했던 세부 작업 내용들을 복원해야 할 때 사용하는 기능
- Spring 트랜젝션 설정 방법
1. pom.xml에 spring-tx dependency 추가
2. servlet-context.xml에 transaction 설정 추가
3. 트랜젝션을 관리할 서비스의 메소드에 @Transactional 어노테이션 붙이기
- 사용 목적
- DAO 작업을 여러 개 사용할 때, 사용할 모든 DAO 작업이 전부 수행되면 한번에 Commit 하기 위함이다.
- 예시
- 주제 : 상품 거래
1. 상품의 가격 가져옴
2. 상품의 가격 만큼 고객의 잔고 잔액을 차감시킴
3. 재고 개수를 줄임
- 2, 3번에서 DB 테이블에 CHECK(재고 or 잔액 >= 0) 설정이 존재한다면 0일 때, 오류가 발생할 수 있다.
- 형식
@Transactional
@Override
public void buy(HttpServletRequest request, ModelAndView mView) {
String id=(String)request.getSession().getAttribute("id");
int num=Integer.parseInt(request.getParameter("num"));
int price=shopDao.getPrice(num);
ShopDto dto=new ShopDto();
dto.setId(id);
dto.setPrice(price);
shopDao.minusMoney(dto);
shopDao.plusPoint(dto);
shopDao.minusCount(num);
OrderDto dto2=new OrderDto();
dto2.setId(id);
dto2.setCode(num);
String addr="제주시 삼원빌딩";
dto2.setAddr(addr);
if(addr.contains("제주")) {
throw new NotDeliveryException("제주는 배송 불가 지역 입니다.");
}
orderDao.addOrder(dto2);
}