У меня есть сценарий ниже в унаследованной кодовой базе - таблица 'Team'
содержит информацию о Команде и счетчике.Он имеет столбец с именами 'TEAM_NAME'
и 'COUNTER'
.Ниже 3-х шаговая операция выполняется в транзакции -
- Возьмите эксклюзивный
LOCK
для таблицы. - Считайте счетчик, соответствующий команде.
- Использованиеэтот счетчик и увеличьте значение счетчика и сохраните его обратно в таблицу TEAM.
Как только эти шаги будут выполнены, завершите операцию.Из-за использования на первом этапе исключительной блокировки на столе другие параллельные транзакции завершаются неудачно.Я хочу выполнить это без потери транзакций в системе.Я действительно думаю, что если я удаляю оператор LOCK
и у меня есть метод как Synchronized
, он может работать, но у меня есть 4 JVM в реальном времени, и все же одновременная транзакция может поразить это.Пожалуйста, предложите лучший способ решения этой проблемы.