Transaktioner
En transaktion ger oss i huvudsak ett val: antingen slutförs alla operationer inom den framgångsrikt, eller så utförs ingen av dem alls.
Föreställ dig en banköverföring, där pengar flyttas från ett konto till ett annat. Denna process innefattar två steg:
- Dra av pengar från ett konto;
- Sätta in pengar på ett annat konto.
Om transaktionen misslyckas efter att pengarna dragits av men innan de satts in, kan medlen "förloras." En transaktion säkerställer att båda operationerna antingen slutförs helt eller återställs helt.
Grundläggande om transaktionshantering
@Transactional -annoteringen: Denna används för att deklarera metoder eller klasser som ska köras inom ramen för en transaktion.
När en metod med denna annotering anropas, startar Spring en ny transaktion. Om metoden slutförs utan fel kommer transaktionen att committas; annars rullas den tillbaka.
Här ges ett exempel baserat på det tidigare nämnda verkliga scenariot.
BankService.java
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); } }
När metoden transferMoney är markerad med annoteringen @Transactional innebär det att alla ändringar som sker inom denna metod kommer att utföras inom en enda transaktion.
När vi anropar fromAccount.withdraw(amount) följt av toAccount.deposit(amount) måste båda dessa åtgärder slutföras framgångsrikt. Om till exempel ett fel uppstår under operationen toAccount.deposit(amount), kommer transaktionen automatiskt att rulla tillbaka de ändringar som gjordes under steget fromAccount.withdraw(amount).
Detta säkerställer att antingen båda operationerna utförs och pengarna överförs, eller, vid ett fel, att ingen av operationerna utförs, vilket förhindrar någon förlust av medel. Transaktionen garanterar att databasen aldrig lämnas i ett inkonsekvent tillstånd.
Praktisk tillämpning av transaktioner
Sammanfattning
En transaktion är en uppsättning databasoperationer som behandlas som en enhet, vilket säkerställer att alla operationer lyckas tillsammans eller helt rullas tillbaka vid fel. Du kan läsa mer om transaktioner här.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 3.45
Transaktioner
Svep för att visa menyn
En transaktion ger oss i huvudsak ett val: antingen slutförs alla operationer inom den framgångsrikt, eller så utförs ingen av dem alls.
Föreställ dig en banköverföring, där pengar flyttas från ett konto till ett annat. Denna process innefattar två steg:
- Dra av pengar från ett konto;
- Sätta in pengar på ett annat konto.
Om transaktionen misslyckas efter att pengarna dragits av men innan de satts in, kan medlen "förloras." En transaktion säkerställer att båda operationerna antingen slutförs helt eller återställs helt.
Grundläggande om transaktionshantering
@Transactional -annoteringen: Denna används för att deklarera metoder eller klasser som ska köras inom ramen för en transaktion.
När en metod med denna annotering anropas, startar Spring en ny transaktion. Om metoden slutförs utan fel kommer transaktionen att committas; annars rullas den tillbaka.
Här ges ett exempel baserat på det tidigare nämnda verkliga scenariot.
BankService.java
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); } }
När metoden transferMoney är markerad med annoteringen @Transactional innebär det att alla ändringar som sker inom denna metod kommer att utföras inom en enda transaktion.
När vi anropar fromAccount.withdraw(amount) följt av toAccount.deposit(amount) måste båda dessa åtgärder slutföras framgångsrikt. Om till exempel ett fel uppstår under operationen toAccount.deposit(amount), kommer transaktionen automatiskt att rulla tillbaka de ändringar som gjordes under steget fromAccount.withdraw(amount).
Detta säkerställer att antingen båda operationerna utförs och pengarna överförs, eller, vid ett fel, att ingen av operationerna utförs, vilket förhindrar någon förlust av medel. Transaktionen garanterar att databasen aldrig lämnas i ett inkonsekvent tillstånd.
Praktisk tillämpning av transaktioner
Sammanfattning
En transaktion är en uppsättning databasoperationer som behandlas som en enhet, vilket säkerställer att alla operationer lyckas tillsammans eller helt rullas tillbaka vid fel. Du kan läsa mer om transaktioner här.
Tack för dina kommentarer!