Spring Boot - блокировка чтения БД по методу сервиса - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий сценарий в приложении Spring Boot: Мой сервисный метод читает набор элементов из БД, где item.status = 'open'. Затем я изменю статус одного из этих элементов на «закрыто» и выполню некоторые действия.

Дело в том, что если несколько запросов поступают на сервер, запускаются слишком близко (в течение миллисекунд) параллельные выполнения, и эти параллельные выполнения имеют доступ к старому состоянию (где элемент все еще «открыт», когда он фактически был обработан). ) обработка обработанных элементов, что не может произойти.

Я пытался использовать режим изоляции транзакции для сериализации, но это не решает проблему.

Любые предложения о том, что я делаю неправильно или что я могу попробовать?

Спасибо

1 Ответ

0 голосов
/ 02 июля 2018

Я бы посоветовал вам взглянуть на оптимистические / пессимистичные концепции блокировки и выбрать то, что подходит вам больше всего.

Если вы используете JPA, у него уже есть инструменты для это .

Если нет, то немного больше ручной работы для оптимистической блокировки и некоторый сахар для базы данных для пессимистичного (например, SELECT...FOR UPDATE)

...