Я бы сказал, что это довольно распространенный случай.Предоставление некоторых данных в виде таблицы и задания (также может быть несколько параллельно выполняемых заданий), которое извлекает те данные, которые еще не обработаны.Для этого должно произойти следующее:
- чтение строк с заданным состоянием (например,
is_processed = false
) - блокировка строк до тех пор, пока они еще не обновлены вчтобы избежать параллельной обработки одних и тех же данных (например, set
is_processed = true
) - , что-то сделать с заблокированными данными
- обновить обработанные данные (например, set
processed = true
)
С блокировкой Postgres это довольно простая команда SQL:
update <columen> set <key> = <value> returning *;
Я бы хотел сделать то же самое с JPA, но я не знаю, как этого добиться.Если это важно, я запускаю приложение Spring Boot.