Найти в Дзене
JavaKruzh

Spring @Transactional - Подробное руководство

Что такое @Transactional? @Transactional - это аннотация Spring Framework, которая обеспечивает декларативное управление транзакциями. Она позволяет управлять транзакциями базы данных без написания boilerplate кода. Основные концепции 1. Транзакция Транзакция - это последовательность операций с базой данных, которая выполняется как единое целое: Все или ничего: либо все операции выполняются успешно, либо все откатываются. ACID свойства: Atomicity, Consistency, Isolation, Durability Spring создает прокси-объекты для классов с @Transactional: Типы транзакций 1. Propagation (Распространение)
Определяет, как вести себя при вызове транзакционного метода из другого транзакционного метода: 2. Isolation (Изоляция) Определяет уровень изоляции транзакции: 3. Timeout (Таймаут) 4. ReadOnly (Только чтение) 5. Rollback Rules (Правила отката) Что часто спрашивают на собеседованиях про Transactional 1. Self-invocation (Самовызов) Так же стоит помнить, что private и final методы не могут
Оглавление

Что такое @Transactional?

@Transactional - это аннотация Spring Framework, которая обеспечивает декларативное управление транзакциями. Она позволяет управлять транзакциями базы данных без написания boilerplate кода.

Основные концепции

1. Транзакция

Транзакция - это последовательность операций с базой данных, которая выполняется как единое целое:

Все или ничего: либо все операции выполняются успешно, либо все откатываются.

ACID свойства: Atomicity, Consistency, Isolation, Durability

Spring создает прокси-объекты для классов с @Transactional:

Transactional Proxy Example

Типы транзакций

1. Propagation (Распространение)

Определяет, как вести себя при вызове транзакционного метода из другого транзакционного метода:

-2

transactional-propagation.java

2. Isolation (Изоляция)

Определяет уровень изоляции транзакции:

-3
tranactional-isolation.java

3. Timeout (Таймаут)

-4
transactional-timeout.java

4. ReadOnly (Только чтение)

-5

transational-readonly.java

5. Rollback Rules (Правила отката)

-6
transactional-rollback.java

Что часто спрашивают на собеседованиях про Transactional

1. Self-invocation (Самовызов)

-7
-8
transactional-problem-1.java

Так же стоит помнить, что private и final методы не могут быть транзакционными.

Ключевые моменты для запоминания

  1. Transactional работает только на public методах
  2. Используйте self-injection для вызова транзакционного метода внутри своего класса
  3. По умолчанию откатывается только при RuntimeException
  4. ReadOnly оптимизирует производительность
  5. Propagation определяет поведение при вложенных транзакциях
  6. Timeout защищает от зависших транзакций

Тест по Spring @Transactional

Предлагаю закрепить знания и пройти тест по ссылке:

transactional-test.java