Transaktioner
En transaktion giver os grundlæggende et valg: enten bliver alle operationer inden for den gennemført succesfuldt, eller også bliver ingen af dem udført overhovedet.
Forestil dig en bankoverførsel, hvor penge bliver flyttet fra én konto til en anden. Denne proces involverer to trin:
- Træk penge fra én konto;
- Indsæt penge på en anden konto.
Hvis transaktionen fejler efter penge er trukket, men før de indsættes, kan midlerne gå "tabt." En transaktion sikrer, at begge operationer enten bliver fuldt gennemført eller fuldt tilbagerullet.
Grundlæggende om transaktionsstyring
@Transactional annotation: Bruges til at angive metoder eller klasser, der skal udføres inden for rammen af en transaktion.
Når en metode med denne annotation kaldes, starter Spring en ny transaktion. Hvis metoden afsluttes succesfuldt, bliver transaktionen committed; ellers bliver den rullet tilbage.
Eksempel baseret på det tidligere nævnte virkelige scenarie.
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 er markeret med annoteringen @Transactional, betyder det, at alle ændringer, der sker inden for denne metode, vil blive udført som en enkelt transaktion.
Når vi kalder fromAccount.withdraw(amount) efterfulgt af toAccount.deposit(amount), skal begge disse handlinger gennemføres succesfuldt. Hvis der for eksempel opstår en fejl under operationen toAccount.deposit(amount), vil transaktionen automatisk rulle ændringerne tilbage, der blev foretaget under trinnet fromAccount.withdraw(amount).
Dette sikrer, at enten begge operationer udføres og pengene overføres, eller, i tilfælde af en fejl, ingen af operationerne gennemføres, hvilket forhindrer ethvert tab af midler. Transaktionen garanterer, at databasen aldrig efterlades i en inkonsistent tilstand.
Praktisk anvendelse af transaktioner
Resumé
En transaktion er et sæt af database-operationer behandlet som en enhed, hvilket sikrer, at alle operationer lykkes sammen eller fuldt ud rulles tilbage i tilfælde af fejl. Du kan læse mere om transaktioner her.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
What are the main benefits of using transactions in database operations?
Can you explain how the @Transactional annotation works in more detail?
Are there any common pitfalls or mistakes to avoid when working with transactions in Spring?
Awesome!
Completion rate improved to 3.45
Transaktioner
Stryg for at vise menuen
En transaktion giver os grundlæggende et valg: enten bliver alle operationer inden for den gennemført succesfuldt, eller også bliver ingen af dem udført overhovedet.
Forestil dig en bankoverførsel, hvor penge bliver flyttet fra én konto til en anden. Denne proces involverer to trin:
- Træk penge fra én konto;
- Indsæt penge på en anden konto.
Hvis transaktionen fejler efter penge er trukket, men før de indsættes, kan midlerne gå "tabt." En transaktion sikrer, at begge operationer enten bliver fuldt gennemført eller fuldt tilbagerullet.
Grundlæggende om transaktionsstyring
@Transactional annotation: Bruges til at angive metoder eller klasser, der skal udføres inden for rammen af en transaktion.
Når en metode med denne annotation kaldes, starter Spring en ny transaktion. Hvis metoden afsluttes succesfuldt, bliver transaktionen committed; ellers bliver den rullet tilbage.
Eksempel baseret på det tidligere nævnte virkelige scenarie.
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 er markeret med annoteringen @Transactional, betyder det, at alle ændringer, der sker inden for denne metode, vil blive udført som en enkelt transaktion.
Når vi kalder fromAccount.withdraw(amount) efterfulgt af toAccount.deposit(amount), skal begge disse handlinger gennemføres succesfuldt. Hvis der for eksempel opstår en fejl under operationen toAccount.deposit(amount), vil transaktionen automatisk rulle ændringerne tilbage, der blev foretaget under trinnet fromAccount.withdraw(amount).
Dette sikrer, at enten begge operationer udføres og pengene overføres, eller, i tilfælde af en fejl, ingen af operationerne gennemføres, hvilket forhindrer ethvert tab af midler. Transaktionen garanterer, at databasen aldrig efterlades i en inkonsistent tilstand.
Praktisk anvendelse af transaktioner
Resumé
En transaktion er et sæt af database-operationer behandlet som en enhed, hvilket sikrer, at alle operationer lykkes sammen eller fuldt ud rulles tilbage i tilfælde af fejl. Du kan læse mere om transaktioner her.
Tak for dine kommentarer!