Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Транзакції | Робота з Базами Даних
Spring Boot Backend

bookТранзакції

Транзакція по суті надає нам вибір: або всі операції в її межах виконуються успішно, або жодна з них не виконується взагалі.

Уявіть собі операцію банківського переказу, коли гроші переміщуються з одного рахунку на інший. Цей процес складається з двох кроків:

  1. Списання грошей з одного рахунку;
  2. Зарахування грошей на інший рахунок.

Якщо транзакція зазнає невдачі після списання грошей, але до зарахування, кошти можуть бути "втрачені". Транзакція гарантує, що обидві операції або повністю завершуються, або повністю скасовуються.

Основи керування транзакціями

Анотація @Transactional: використовується для позначення методів або класів, які повинні виконуватися у контексті транзакції.

Коли викликається метод з цією анотацією, Spring розпочинає нову транзакцію. Якщо метод завершується успішно, транзакція фіксується; інакше вона відкочується.

Розглянемо приклад на основі реальної ситуації, згаданої раніше.

BankService.java

BankService.java

copy
1234567891011121314151617
@Service public class BankService { private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId); Account toAccount = accountRepository.findById(toAccountId); fromAccount.withdraw(amount); toAccount.deposit(amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } }

Коли метод transferMoney позначено анотацією @Transactional, це означає, що всі зміни, які відбуваються всередині цього методу, будуть виконані в межах однієї транзакції.

Коли викликаються fromAccount.withdraw(amount) та toAccount.deposit(amount), обидві ці дії мають бути успішно завершені. Якщо, наприклад, під час виконання операції toAccount.deposit(amount) виникає помилка, транзакція автоматично відкотить зміни, зроблені під час кроку fromAccount.withdraw(amount).

Це гарантує, що або обидві операції виконуються і гроші переводяться, або, у разі помилки, жодна операція не виконується, що запобігає будь-якій втраті коштів. Транзакція гарантує, що база даних ніколи не залишиться у неконсистентному стані.

Практичне застосування транзакцій

Підсумок

Транзакція — це набір операцій з базою даних, які розглядаються як єдине ціле, що гарантує успішне виконання всіх операцій разом або їх повний відкат у разі помилки. Дізнатися більше про транзакції можна тут.

question mark

Що таке transaction у контексті бази даних?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 3.45

bookТранзакції

Свайпніть щоб показати меню

Транзакція по суті надає нам вибір: або всі операції в її межах виконуються успішно, або жодна з них не виконується взагалі.

Уявіть собі операцію банківського переказу, коли гроші переміщуються з одного рахунку на інший. Цей процес складається з двох кроків:

  1. Списання грошей з одного рахунку;
  2. Зарахування грошей на інший рахунок.

Якщо транзакція зазнає невдачі після списання грошей, але до зарахування, кошти можуть бути "втрачені". Транзакція гарантує, що обидві операції або повністю завершуються, або повністю скасовуються.

Основи керування транзакціями

Анотація @Transactional: використовується для позначення методів або класів, які повинні виконуватися у контексті транзакції.

Коли викликається метод з цією анотацією, Spring розпочинає нову транзакцію. Якщо метод завершується успішно, транзакція фіксується; інакше вона відкочується.

Розглянемо приклад на основі реальної ситуації, згаданої раніше.

BankService.java

BankService.java

copy
1234567891011121314151617
@Service public class BankService { private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId); Account toAccount = accountRepository.findById(toAccountId); fromAccount.withdraw(amount); toAccount.deposit(amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } }

Коли метод transferMoney позначено анотацією @Transactional, це означає, що всі зміни, які відбуваються всередині цього методу, будуть виконані в межах однієї транзакції.

Коли викликаються fromAccount.withdraw(amount) та toAccount.deposit(amount), обидві ці дії мають бути успішно завершені. Якщо, наприклад, під час виконання операції toAccount.deposit(amount) виникає помилка, транзакція автоматично відкотить зміни, зроблені під час кроку fromAccount.withdraw(amount).

Це гарантує, що або обидві операції виконуються і гроші переводяться, або, у разі помилки, жодна операція не виконується, що запобігає будь-якій втраті коштів. Транзакція гарантує, що база даних ніколи не залишиться у неконсистентному стані.

Практичне застосування транзакцій

Підсумок

Транзакція — це набір операцій з базою даних, які розглядаються як єдине ціле, що гарантує успішне виконання всіх операцій разом або їх повний відкат у разі помилки. Дізнатися більше про транзакції можна тут.

question mark

Що таке transaction у контексті бази даних?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 6
some-alt