Какой уровень изоляции транзакций используется по умолчанию в Spring Framework?

«Какой уровень изоляции транзакций используется по умолчанию в Spring Framework?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Spring по умолчанию используется уровень Isolation.DEFAULT.

Что это означает: Spring делегирует выбор уровня изоляции базе данных. Для большинства СУБД (PostgreSQL, Oracle, SQL Server) уровень по умолчанию — READ_COMMITTED.

Пример явного указания уровня в аннотации @Transactional:

@Service
public class UserService {
    @Transactional(isolation = Isolation.READ_COMMITTED) // Явное указание
    public void updateUser(Long userId, String name) {
        // ... логика
    }
}

Доступные уровни изоляции в Spring (org.springframework.transaction.annotation.Isolation):

  1. DEFAULT – настройки СУБД.
  2. READ_UNCOMMITTED – разрешает Dirty Read.
  3. READ_COMMITTED – предотвращает Dirty Read (стандартный выбор).
  4. REPEATABLE_READ – предотвращает Dirty и Non-repeatable Read.
  5. SERIALIZABLE – полная изоляция.

Важно: Фактическое поведение зависит от реализации СУБД (блокировки или MVCC).