Kursinhalt
Spring Boot Backend
Spring Boot Backend
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:
- Abzug von Geld von einem Konto;
- 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.
BankService
@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.
Danke für Ihr Feedback!