Grails 3 - глобально увеличенное число - PullRequest
0 голосов
/ 26 июня 2018

У меня есть глобальное число, которое часто увеличивается, но сбрасывается ежегодно. Прямо сейчас я храню это глобальное число в виде одной строки:

class GlobalCounter {
    Integer counter = 0
    static constraints = {
    }
}

Когда я увеличиваю его, я использую блокировку в транзакции:

    def globalCounter = GlobalCounter.lock(1)
    globalCounter.counter = globalCounter.counter + 1
    globalCounter.save()
    globalCounter.discard()

Проблема в том, что при частом обновлении вместо ожидающего кода появляется исключение:

Transaction (Process ID 61) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

Я знаю, что когда вы добавляете новую строку, база данных дает возможность использовать первичный ключ с автоматическим приращением, поэтому я думаю, что это должно быть возможно без взаимоблокировок. Как я могу это сделать?

...