
오류를 발생시키게 하면 스프링에서 제공하는 트렌젝션 메니저가
transactionManager.rollback(status);를 처리해줘서
중간에 오류가 날 경우 롤백해줘서 반만 처리되거나 하는 행위를 방지함
@Service
public class BuyTicketService implements IBuyTicketService{
@Autowired
ITransaction1Dao transaction1;
@Autowired
ITransaction2Dao transaction2;
@Autowired
PlatformTransactionManager transactionManager;
@Autowired
TransactionDefinition definition;
@Override
public int buy(String consumerId, int amount, String error) {
TransactionStatus status = transactionManager.getTransaction(definition);
System.out.println(consumerId+amount+error);
try {
transaction1.pay(consumerId, amount);
//의도적으로 에러 발생
if(error.equals("1")) {
int n = 10/0;
}
transaction2.pay(consumerId, amount);
transactionManager.commit(status);
return 1;
}catch(Exception e) {
System.out.println("[PlatformTransactionManager] Rollback");
transactionManager.rollback(status);
return 0;
}
}
}