TGViewer
Java Mentor Java Mentor @your_java_mentor · 289 subscribers
Post #333 416
💡 Когда и где использовать @Transactional в Spring?

После выхода последнего видео получил хороший вопрос:

"А когда вообще стоит использовать @Transactional? Например, для методов getAll, getById, create, update, delete — нужно ли? И создает ли она дополнительную нагрузку?"

Выше оставил маленькую шпору, а ниже разбирем всё по порядку 👇

📌 1. Где использовать?
@Transactional имеет смысл в методах, где мы меняем состояние базы данных — то есть выполняем INSERT, UPDATE или DELETE.
Это:

🔸create
🔸update
🔸delete

а также более сложные методы, где за один вызов происходит несколько изменений в разных таблицах

‼️ Особенно важно оборачивать транзакцией методы с несколькими изменениями — тогда в случае ошибки все изменения откатятся.

А вот если у вас всего один апдейт, то @Transactional технически не обязателен — драйвер JDBC и так выполняет операцию в транзакции (если надо расскажу об этом подробнее). Но вешать её можно для единообразия, особенно если логика метода со временем может вырасти.

📌 2. Нагрузка на БД
Транзакция сама по себе — не "тяжёлая" операция, но:

1. Держит соединение с БД дольше
2. Может блокировать строки или таблицы (зависит от уровня изоляции)
3. В случае долгих транзакций — мешает другим запросам

Поэтому не транзакционируем всё подряд, особенно долгие чтения.

📌 3. Нагрузка на приложение
Spring при использовании @Transactional создаёт прокси и оборачивает вызов метода в транзакционный менеджер.
Эта накладка минимальна, а основная "стоимость" транзакций всегда на стороне базы.

💬 Итог:

1️⃣ Несколько изменений в БД → транзакция обязательна
2️⃣ Один апдейт → можно без неё, но допустимо вешать для консистентности
3️⃣ Чтение → транзакция редко нужна, но бывают исключения

⚡ Это базовые принципы, но транзакции ещё и по-разному взаимодействуют друг с другом: одни продолжают существующую, другие создают новую, третьи вообще запрещают выполнение внутри транзакции.
Подробно об этом я рассказал в новом видео — в котором разобрал параметр Propagation и показал на примере как оно работает под капотом

🎥 Ссылка на видео: https://youtu.be/ZWuvSOCRs3Q?si=TPUYjcVto42gfHMp
  • ❤ 7
  • 🔥 7
  • 👍 2
More from @your_java_mentor
  1. Sep 2, 2026photo post
  2. Sep 2, 2026video post
  3. Sep 1, 2026Post #394
  4. Sep 1, 2026Post #393
  5. Aug 28, 2026Как по вашему, что не так с этим кодом? ❌ В методе main в список добавляются магические ко…
  6. Aug 19, 2026UserService + UserServiceImpl — но Impl тут единственный. Как вы считаете: стоит ли заводи…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →