@Volokoron

Как управлять транзакциями в spring data?

Доброго дня!
Делаю учебный проект spring boot + spring data + postgresql. Бронирование авиабилетов. Чтобы исключить возможность покупки лишних билетов, создал таблицу в которой есть информация об оставшемся количестве не проданных билетов. Вместо использования уровня изоляции Serializable, хочу заблокировать только строку через FOR UPDATE и @Lock(LockModeType.PESSIMISTIC_WRITE). Но как сделать так чтобы транзакция не коммитилась до подтверждения оплаты или в течении заданного времени, если оплата не прошла.
Или какой подход вообще использовать в данной ситуации?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
BorLaze
@BorLaze
Java developer
Не надо это именно делать через транзакции.

На каждую "покупку" создаешь заявку в отдельной таблице "бронь".
При поступлении оплаты - продаешь билет, удаляешь запись из заявок.
С определенной периодичностью проходишь по этой таблице, удаляешь устаревшие заявки.
Вот тут, да - все делаем в транзакции.

Соответственно, при расчете количества доступных билетов считаешь как КОЛ_БИЛЕТОВ - КОЛ_ЗАЯВОК.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы