Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Transaktionen | Arbeiten mit Datenbanken
Spring Boot Backend

book
Transaktionen

Eine Transaktion gibt uns im Wesentlichen eine Wahl: Entweder werden alle Operationen innerhalb der Transaktion erfolgreich abgeschlossen, oder keine von ihnen wird überhaupt ausgeführt.

Stellen Sie sich eine Banküberweisung vor, bei der Geld von einem Konto auf ein anderes übertragen wird. Dieser Prozess umfasst zwei Schritte:

  1. Abzug von Geld von einem Konto;
  2. Einzahlung von Geld auf ein anderes Konto.

Wenn die Transaktion nach dem Abzug von Geld fehlschlägt, aber bevor es eingezahlt wird, könnten die Mittel "verloren" gehen. Eine Transaktion stellt sicher, dass beide Operationen entweder vollständig abgeschlossen oder vollständig rückgängig gemacht werden.

Grundlagen des Transaktionsmanagements

Die @Transactional Annotation: Diese wird verwendet, um Methoden oder Klassen zu deklarieren, die innerhalb des Kontexts einer Transaktion ausgeführt werden sollen.

Wenn eine Methode mit dieser Annotation aufgerufen wird, startet Spring eine neue Transaktion. Wenn die Methode erfolgreich abgeschlossen wird, wird die Transaktion committed; andernfalls wird sie zurückgesetzt.

Lassen Sie uns ein Beispiel basierend auf dem früher erwähnten realen Szenario bereitstellen.

java

BankService

copy
@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);
}
}
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); } }

Wenn die transferMoney Methode mit der @Transactional Annotation markiert ist, bedeutet dies, dass alle Änderungen, die innerhalb dieser Methode stattfinden, innerhalb einer einzigen Transaktion ausgeführt werden.

Wenn wir fromAccount.withdraw(amount) gefolgt von toAccount.deposit(amount) aufrufen, müssen beide dieser Aktionen erfolgreich abgeschlossen werden. Wenn zum Beispiel ein Fehler auftritt während der toAccount.deposit(amount) Operation, wird die Transaktion automatisch die während des fromAccount.withdraw(amount) Schritts vorgenommenen Änderungen zurücksetzen.

Dies gewährleistet, dass entweder beide Operationen ausgeführt werden und das Geld übertragen wird, oder im Falle eines Fehlers keine der Operationen durchgeführt wird, was Verluste von Geldern verhindert. Die Transaktion garantiert, dass die Datenbank niemals in einem inkonsistenten Zustand verbleibt.

Praktische Anwendung von Transaktionen

Zusammenfassung

Eine Transaktion ist eine Reihe von Datenbank-Operationen, die als einzelne Einheit behandelt werden, um sicherzustellen, dass alle Operationen zusammen erfolgreich sind oder im Falle eines Fehlers vollständig zurückgesetzt werden. Sie können mehr über Transaktionen erfahren hier.

question mark

Was ist eine transaction im Kontext einer Datenbank?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 6
some-alt