Чтение зафиксированной блокировки уровня изоляции
Я пытаюсь понять и использовать пружинный уровень транзакционной изоляции. Мне нужно максимизировать параллелизм моего приложения, и я просто должен быть осторожен с грязным чтением. Призрачное чтение и другие сценарии действительно не требуются. Поэтому решил использовать Isolation.READ_COMMITTED для одного из наиболее используемых транзакционных методов моего приложения. Согласно весенней документации:
Этот уровень только запрещает транзакции читать строку с незафиксированными изменениями в ней.
Итак, вот сценарий, с которым я столкнулся, который, я считаю, немного отличается от приведенного выше утверждения
criticalMethod(customeId):
- Считать данные клиента из таблицы 1
- принять какое-то решение
- добавить новую строку для этого клиента в table1
- продолжить длительную обработку.....
Таким образом, когда этот метод вызывается параллельно для двух совершенно независимых клиентов c1 и c2, если для c1 был на шаге 4, когда вызывается метод для c2. Так что мой вызов метода для блоков c2 на шаге 1 вызов метода для c1 заканчивается.
Я смоделировал этот сценарий с отладкой затмения. Я могу запросить данные со стороны моей базы данных на table1 для клиента c2. Согласно приведенной выше документации Spring, мой второй вызов метода не должен быть заблокирован.
Я что-то пропустил?
Вот мой стек технологий:
- Ява: 8
- Весна: 4.3.7
- База данных: SqlServer 2012
- ORM: Mybatis 3.4.2
- mybatis весенняя версия: 1.3.1