Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Transaksjoner | Arbeide med Databaser
Spring Boot Backend

bookTransaksjoner

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:

  1. Trekke penger fra én konto;
  2. 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

BankService.java

copy
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.

question mark

Hva er en transaction i konteksten av en database?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 6

Spør AI

expand

Spør AI

ChatGPT

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

bookTransaksjoner

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:

  1. Trekke penger fra én konto;
  2. 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

BankService.java

copy
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.

question mark

Hva er en transaction i konteksten av en database?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 6
some-alt