작성
·
60
0
public class NamedLockStockFacade {
private final LockRepository lockRepository;
private final StockService stockService;
public void decrease(Long id, Long quantity) {
try {
lockRepository.getLock(id.toString());
stockService.decrease(id, quantity);
} finally {
lockRepository.releaseLock(id.toString());
}
}
}
-----------
@Transactional
public void decrease(Long id, Long quantity) {
Stock stock = stockRepository.findById(id).orElseThrow();
stock.decrease(quantity);
stockRepository.saveAndFlush(stock);
}
이렇게 자식에만 트랜잭션이 걸려있으면, 커밋이 다되고 lock 풀리는거아니에요? 굳이 부모에 트랜잭션 붙이고 자식트랜잭션에서 NEW하는 이유가 있나요?
답변 1
0
donkey 님 안녕하세요 namedlock 의 특성상 같은 세션 안에서만 동일한 키에 대한 락을 획득과 해제를 할 수 있습니다.
같은세션이란 Application Layer 의 세션이 아닌 mysql session 입니다.
따라서, 트랜잭셔널을 사용하여 같은 세션을 사용토록 하기위함입니다.
감사합니다.