Чтение зафиксированной блокировки уровня изоляции - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь понять и использовать пружинный уровень транзакционной изоляции. Мне нужно максимизировать параллелизм моего приложения, и мне просто нужно быть осторожным с грязным чтением. Призрачное чтение и другие сценарии действительно не требуются. Поэтому решил использовать Isolation.READ_COMMITTED для одного из наиболее используемых транзакционных методов моего приложения. Согласно весеннему документу:

Этот уровень запрещает транзакции только читать строку с незафиксированными изменениями в ней.

Итак, вот сценарий, с которым я столкнулся, который, я считаю, немного отличается от приведенного выше утверждения.

критический метод (customeId):

  1. Считать данные клиента из таблицы1
  2. принять какое-то решение
  3. добавить новую строку для этого клиента в table1
  4. продолжить длительную обработку .....

Таким образом, когда этот метод вызывается параллельно для двух совершенно независимых клиентов c1 и c2, если для c1 был на шаге 4, когда вызывается метод для c2. Так что мой вызов метода для блоков c2 на шаге 1 вызов метода для c1 заканчивается.

Я смоделировал этот сценарий с помощью отладки затмения. Я могу запрашивать данные со стороны моей базы данных на table1 для клиента c2. Согласно приведенной выше документации Spring, мой второй вызов метода не должен быть заблокирован.

Я что-то упустил?

Вот мой стек технологий:

  • Java: 8
  • Пружина: 4.3.7
  • База данных: SqlServer 2012
  • ORM: Mybatis 3.4.2
  • mybatis spring version: 1.3.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...