Какой лучший способ решить проблему гонки в приложении Java Spring? - PullRequest
0 голосов
/ 04 мая 2020

Я разрабатываю простое веб-приложение для викторины на Spring, которое реализует «кнопку викторины», на стороне клиента игроки должны нажимать на кнопку быстрее, чем другие, чтобы получить очки. Таким образом, у меня есть метод контроллера, такой как

@RequestMapping(value = "/pressButton", method = RequestMethod.POST)
public String processButtonClick(Authentication authentication) {
    //return first player name
}

Как проверить, какой пользователь нажал на это первым? Как предотвратить состояние гонки при обновлении БД?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я предлагаю go с добавлением уникального ограничения для комбинации userId и questionId в вашей БД. Синхронизированный будет работать только в том случае, если существует только один экземпляр службы, который редко используется для среды с высокой степенью масштабируемости. Redis Lock - еще один жизнеспособный вариант.

0 голосов
/ 04 мая 2020

Вы можете назначить свой метод с помощью synchronized, тогда он не будет запускаться одновременно много раз.

...