В этой статье разберемся, как лечить изменения проводились на пользователей, которые аннулируются, и как решить эту проблему с помощью Spring.
O проблема
Основываясь на класс, обратите Внимание, представим себе следующий сценарий:
public class Note { private String title; private String body; // getters & setters... }
-
1
открывает окно и изменяет поле,название
- |/| 2
открывает окно и изменяет поля
тело - 1
обновление информации
заголовок|/| 2
- перезаписывает информацию
1
, так что это был последний проводить измененияВ реестре находится с | тела изменены
Таким образом, у нас есть проблема создается из-за отсутствия lock.
И какие замки?
Lock-это способ избежать более одного доступа выполняется к определенному ресурсу. Например: в базе данных, если вы создаете update, а забыть дать совершить, будет создан блокировки (lock), для потребителей, чтобы всегда иметь последнюю версию дано.
Este exemplo é o que champs de замок пессимиста (пессимистический замок).
заблокируйте пессимистов
Lock пессимистом, когда вы ‘безопасной’ ресурс (в приведенном примере), так что никто не может использовать во время работы с ней. Это может вызвать проблемы на пользователей, уже что только человек, который ‘взял первый”, может работать с этим ресурсом, а в это время, другой пользователь будет в ожидании, что дает расплывчатую впечатление, что их программное обеспечение работает медленно, или даже уловил 😱 (В некоторых случаях может генерировать до deadlock .
O lock оптимистично
Несмотря на то, что содержать блокировки в названии, в этом случае не существует, то проведение ресурса.
В lock оптимистично, мы делаем проверку в реестре, прежде чем обновить. Этот контроль может быть сделано по дате, по порядку или в других более творческие подходы.
После например lock оптимистично:
-
1
открывает экран (версия 1) и изменяет поляtitle
; - |/| 2
открывает экран (версия 1) и изменяет поля
body;
- 1
обновляет информацию с
title;
App внутренне обновляет поле версии 2; - |/| 2
- попытки передачи информации тело изменен, но с
версия 1
;Lock проводится, и нам удалось обнаружить, что кто-то обновил, чтобы другой версии, ранее 🤗 .
На практике
public class Note { private String title; private String body; // Atributo que fará a verificação se // a versão atual é a mais recente @Version private int version; }
Класс Обратите внимание на руки, я добавил атрибут типа int в класс, Note, annotation @Version
. Таким образом, Spring автоматически выполняет проверок необходимых, и всякий раз, когда запись была обновлена, версия увеличивается.
Завершение
Существуют различные способы лечения, одновременное изменение, Весна в поставке @Version
, , простое и практичное, позволяет проводить контроль над версиями данной записи.
И вы , когда-либо искали в вашем framework любимый, как решить этот тип проблемы?
Оригинал: “https://dev.to/kvnallen/tratando-modificacoes-simultaneas-com-spring-3lf5”