Transaktiot
Transaktio antaa meille käytännössä valinnan: joko kaikki sen sisällä olevat toiminnot suoritetaan onnistuneesti loppuun, tai mitään niistä ei suoriteta lainkaan.
Kuvittele pankkisiirto, jossa rahaa siirretään yhdeltä tililtä toiselle. Tämä prosessi sisältää kaksi vaihetta:
- Rahan vähentäminen yhdeltä tililtä;
- Rahan tallettaminen toiselle tilille.
Jos transaktio epäonnistuu rahan vähentämisen jälkeen mutta ennen talletusta, varat voivat "kadota". Transaktio varmistaa, että molemmat toiminnot joko suoritetaan kokonaan tai perutaan kokonaan.
Transaktioiden hallinnan perusteet
@Transactional -annotaatio: Tätä käytetään määrittämään metodit tai luokat, jotka tulee suorittaa transaktion kontekstissa.
Kun metodia, jolla on tämä annotaatio, kutsutaan, Spring käynnistää uuden transaktion. Jos metodi suoritetaan onnistuneesti, transaktio kommitoidaan; muussa tapauksessa se peruutetaan.
Tarkastellaan esimerkkiä aiemmin mainitusta todellisesta tilanteesta.
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); } }
Kun transferMoney-metodi on merkitty @Transactional-annotaatiolla, kaikki tämän metodin sisällä tapahtuvat muutokset suoritetaan yhtenä transaktiona.
Kun kutsutaan fromAccount.withdraw(amount) ja sen jälkeen toAccount.deposit(amount), molempien toimintojen on onnistuttava. Jos esimerkiksi virhe tapahtuu toAccount.deposit(amount)-operaation aikana, transaktio peruuttaa automaattisesti fromAccount.withdraw(amount)-vaiheessa tehdyt muutokset.
Tämä varmistaa, että joko molemmat operaatiot suoritetaan ja rahat siirretään, tai virheen sattuessa kumpaakaan operaatiota ei suoriteta, mikä estää varojen menetyksen. Transaktio takaa, että tietokanta ei jää koskaan epäjohdonmukaiseen tilaan.
Transaktioiden käytännön soveltaminen
Yhteenveto
Transaktio on joukko tietokantaoperaatioita, joita käsitellään yhtenä kokonaisuutena, varmistaen, että kaikki operaatiot onnistuvat yhdessä tai kaikki peruutetaan epäonnistumisen sattuessa. Voit lukea lisää transaktioista täältä.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Transaktiot
Pyyhkäise näyttääksesi valikon
Transaktio antaa meille käytännössä valinnan: joko kaikki sen sisällä olevat toiminnot suoritetaan onnistuneesti loppuun, tai mitään niistä ei suoriteta lainkaan.
Kuvittele pankkisiirto, jossa rahaa siirretään yhdeltä tililtä toiselle. Tämä prosessi sisältää kaksi vaihetta:
- Rahan vähentäminen yhdeltä tililtä;
- Rahan tallettaminen toiselle tilille.
Jos transaktio epäonnistuu rahan vähentämisen jälkeen mutta ennen talletusta, varat voivat "kadota". Transaktio varmistaa, että molemmat toiminnot joko suoritetaan kokonaan tai perutaan kokonaan.
Transaktioiden hallinnan perusteet
@Transactional -annotaatio: Tätä käytetään määrittämään metodit tai luokat, jotka tulee suorittaa transaktion kontekstissa.
Kun metodia, jolla on tämä annotaatio, kutsutaan, Spring käynnistää uuden transaktion. Jos metodi suoritetaan onnistuneesti, transaktio kommitoidaan; muussa tapauksessa se peruutetaan.
Tarkastellaan esimerkkiä aiemmin mainitusta todellisesta tilanteesta.
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); } }
Kun transferMoney-metodi on merkitty @Transactional-annotaatiolla, kaikki tämän metodin sisällä tapahtuvat muutokset suoritetaan yhtenä transaktiona.
Kun kutsutaan fromAccount.withdraw(amount) ja sen jälkeen toAccount.deposit(amount), molempien toimintojen on onnistuttava. Jos esimerkiksi virhe tapahtuu toAccount.deposit(amount)-operaation aikana, transaktio peruuttaa automaattisesti fromAccount.withdraw(amount)-vaiheessa tehdyt muutokset.
Tämä varmistaa, että joko molemmat operaatiot suoritetaan ja rahat siirretään, tai virheen sattuessa kumpaakaan operaatiota ei suoriteta, mikä estää varojen menetyksen. Transaktio takaa, että tietokanta ei jää koskaan epäjohdonmukaiseen tilaan.
Transaktioiden käytännön soveltaminen
Yhteenveto
Transaktio on joukko tietokantaoperaatioita, joita käsitellään yhtenä kokonaisuutena, varmistaen, että kaikki operaatiot onnistuvat yhdessä tai kaikki peruutetaan epäonnistumisen sattuessa. Voit lukea lisää transaktioista täältä.
Kiitos palautteestasi!