❓ Что такое Isolation в Spring?
Isolation — это параметр аннотации @Transactional, который определяет, как текущая транзакция взаимодействует с другими при конкурентном доступе к данным.
С помощью этой настройки можно управлять видимостью изменений, сделанных другими транзакциями, и защититься от ошибок, таких как dirty reads, non-repeatable reads и phantom reads.🔹 Уровни изоляции:
— DEFAULT (по умолчанию): используется уровень изоляции, заданный в базе данных.
— READ_UNCOMMITTED: транзакция может видеть несохранённые изменения других транзакций (может возникнуть dirty read).
— READ_COMMITTED: транзакция видит только сохранённые изменения других транзакций (исключает dirty read).
— REPEATABLE_READ: данные, прочитанные транзакцией, остаются неизменными на протяжении всей её работы (исключает dirty read и non-repeatable read).
— SERIALIZABLE: самый строгий уровень, который блокирует доступ к данным для других транзакций до завершения текущей (исключает dirty read, non-repeatable read, и phantom read).🔹 Проблемы конкурентного доступа:
— Dirty Read: одна транзакция видит несохранённые изменения другой.
— Non-Repeatable Read: данные, прочитанные в одной транзакции, могут измениться другой.
— Phantom Read: изменения набора строк, видимого в запросе, из-за вставки или удаления строк другой транзакцией.