Я использую SpringBoot 2.1.10 и SpringData с MongoDB 3.6.2.
У меня есть класс @Service
со следующими бизнес-логиками c для резервирования универсального c ваучера Document:
public Voucher reserveVoucher() {
Voucher voucherToReserve = voucherRepository.findFirstByStatusEquals(VoucherStatus.ACTIVE)
.orElseThrow(() -> new BadRequestException("VOUCHER_NOT_FOUND", "Voucher with status ACTIVE not found"));
voucherToBeConsume.setStatus(VoucherStatus.RESERVED);
voucherToBeConsume.setUserId(voucherConsumer.getUserId());
return voucherRepository.save(voucherToBeConsume);
}
Я знаю, что @Service
классов в Spring по умолчанию Singleton
. Что происходит в среде с большим количеством серверов, если метод findFirstByStatusEquals
извлекает один и тот же документ и после того, как метод save
выполняется дважды? Документ обновляется дважды или второе обновление завершается неудачно?