Transaksjoner
En transaksjon gir oss i hovedsak et valg: enten blir alle operasjonene i transaksjonen fullført vellykket, eller så blir ingen av dem utført i det hele tatt.
Tenk deg en bankoverføring, der penger blir flyttet fra én konto til en annen. Denne prosessen innebærer to trinn:
- Trekke penger fra én konto;
- Sette inn penger på en annen konto.
Hvis transaksjonen feiler etter at pengene er trukket, men før de er satt inn, kan midlene bli "borte." En transaksjon sikrer at begge operasjonene enten blir fullført i sin helhet eller fullstendig reversert.
Grunnleggende om transaksjonshåndtering
@Transactional annotasjonen: Denne brukes til å angi metoder eller klasser som skal utføres innenfor konteksten av en transaksjon.
Når en metode med denne annotasjonen kalles, starter Spring en ny transaksjon. Hvis metoden fullføres vellykket, blir transaksjonen commit'et; ellers blir den rullet tilbake.
Her er et eksempel basert på det tidligere nevnte virkelige scenarioet.
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 merket med annotasjonen @Transactional, betyr det at alle endringer som skjer innenfor denne metoden vil bli utført innenfor én transaksjon.
Når fromAccount.withdraw(amount) etterfølges av toAccount.deposit(amount), må begge disse handlingene fullføres. Hvis det for eksempel oppstår en feil under operasjonen toAccount.deposit(amount), vil transaksjonen automatisk rulle tilbake endringene som ble gjort under steget fromAccount.withdraw(amount).
Dette sikrer at enten begge operasjonene utføres og pengene overføres, eller, i tilfelle en feil, at ingen av operasjonene utføres, noe som forhindrer tap av midler. Transaksjonen garanterer at databasen aldri vil bli stående i en inkonsistent tilstand.
Praktisk bruk av transaksjoner
Sammendrag
En transaksjon er et sett med databaseoperasjoner behandlet som en enhet, som sikrer at alle operasjoner lykkes sammen eller blir fullstendig rullet tilbake ved feil. Du kan lese mer om transaksjoner her.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 3.45
Transaksjoner
Sveip for å vise menyen
En transaksjon gir oss i hovedsak et valg: enten blir alle operasjonene i transaksjonen fullført vellykket, eller så blir ingen av dem utført i det hele tatt.
Tenk deg en bankoverføring, der penger blir flyttet fra én konto til en annen. Denne prosessen innebærer to trinn:
- Trekke penger fra én konto;
- Sette inn penger på en annen konto.
Hvis transaksjonen feiler etter at pengene er trukket, men før de er satt inn, kan midlene bli "borte." En transaksjon sikrer at begge operasjonene enten blir fullført i sin helhet eller fullstendig reversert.
Grunnleggende om transaksjonshåndtering
@Transactional annotasjonen: Denne brukes til å angi metoder eller klasser som skal utføres innenfor konteksten av en transaksjon.
Når en metode med denne annotasjonen kalles, starter Spring en ny transaksjon. Hvis metoden fullføres vellykket, blir transaksjonen commit'et; ellers blir den rullet tilbake.
Her er et eksempel basert på det tidligere nevnte virkelige scenarioet.
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 merket med annotasjonen @Transactional, betyr det at alle endringer som skjer innenfor denne metoden vil bli utført innenfor én transaksjon.
Når fromAccount.withdraw(amount) etterfølges av toAccount.deposit(amount), må begge disse handlingene fullføres. Hvis det for eksempel oppstår en feil under operasjonen toAccount.deposit(amount), vil transaksjonen automatisk rulle tilbake endringene som ble gjort under steget fromAccount.withdraw(amount).
Dette sikrer at enten begge operasjonene utføres og pengene overføres, eller, i tilfelle en feil, at ingen av operasjonene utføres, noe som forhindrer tap av midler. Transaksjonen garanterer at databasen aldri vil bli stående i en inkonsistent tilstand.
Praktisk bruk av transaksjoner
Sammendrag
En transaksjon er et sett med databaseoperasjoner behandlet som en enhet, som sikrer at alle operasjoner lykkes sammen eller blir fullstendig rullet tilbake ved feil. Du kan lese mer om transaksjoner her.
Takk for tilbakemeldingene dine!