Обработка взаимоблокировок при весенней загрузке ⇐ JAVA
Обработка взаимоблокировок при весенней загрузке
Я заметил, что в наших журналах время от времени появляется сообщение "ORA-00060: обнаружена взаимоблокировка во время ожидания ресурса".
Мне хотелось бы добавить лучший способ обработки взаимоблокировок в нашем коде.
Я столкнулся с двумя стратегиями (похожими в логике простого повторения вызовов, если они завершились неудачей из-за взаимоблокировки). Мне интересно, каковы плюсы и минусы обоих и какой из них предпочтительнее использовать или, может быть, предложить что-то другое?
Я обсуждаю два подхода:
Добавление этого повторного объекта в мой метод updateFoo(Foo foo):
@Retryable(maxAttempts = 3, откат = @Backoff(delay = 2000)) Или
Я наткнулся на эту статью: https://aniketkarne.com/handle-deadlock ... 3c83f272fc
Который говорит, что нужно сделать что-то вроде:
@Transactional(noRollbackFor = DeadlockLoserDataAccessException.class) затем добавьте try-catch для перехвата исключения DeadlockLoserDataAccessException, зарегистрируйте предупреждение и снова вызовите метод updateFoo. Хотя, возможно, мне придется добавить повторную попытку примерно три раза.
Первый будет повторять попытку всякий раз, когда вызов завершается неудачей, а другой повторяет попытку, когда возникает это исключение. Есть какие-нибудь мысли о лучших подходах или стратегиях?
Еще одна моя мысль заключалась в добавлении:
@Transactional(isolation = Isolation.SERIALIZABLE) который добавит блокировку и разрешит изменения только последовательно, но не уверен, предотвратит ли это взаимоблокировку?
Я заметил, что в наших журналах время от времени появляется сообщение "ORA-00060: обнаружена взаимоблокировка во время ожидания ресурса".
Мне хотелось бы добавить лучший способ обработки взаимоблокировок в нашем коде.
Я столкнулся с двумя стратегиями (похожими в логике простого повторения вызовов, если они завершились неудачей из-за взаимоблокировки). Мне интересно, каковы плюсы и минусы обоих и какой из них предпочтительнее использовать или, может быть, предложить что-то другое?
Я обсуждаю два подхода:
Добавление этого повторного объекта в мой метод updateFoo(Foo foo):
@Retryable(maxAttempts = 3, откат = @Backoff(delay = 2000)) Или
Я наткнулся на эту статью: https://aniketkarne.com/handle-deadlock ... 3c83f272fc
Который говорит, что нужно сделать что-то вроде:
@Transactional(noRollbackFor = DeadlockLoserDataAccessException.class) затем добавьте try-catch для перехвата исключения DeadlockLoserDataAccessException, зарегистрируйте предупреждение и снова вызовите метод updateFoo. Хотя, возможно, мне придется добавить повторную попытку примерно три раза.
Первый будет повторять попытку всякий раз, когда вызов завершается неудачей, а другой повторяет попытку, когда возникает это исключение. Есть какие-нибудь мысли о лучших подходах или стратегиях?
Еще одна моя мысль заключалась в добавлении:
@Transactional(isolation = Isolation.SERIALIZABLE) который добавит блокировку и разрешит изменения только последовательно, но не уверен, предотвратит ли это взаимоблокировку?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Возникла ошибка при загрузке изображения по определенному пути при весенней загрузке
Anonymous » » в форуме JAVA - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-