Nouvelles Du Monde

postgresql – Niveau d’isolation des transactions pour déplacer de l’argent

postgresql – Niveau d’isolation des transactions pour déplacer de l’argent

2024-04-05 20:10:00

J’ai donc une entité de compte dans Spring JPA et POstgres en tant que DB et je souhaite transférer de l’argent d’un compte à un autre. J’essaie de comprendre quel est le niveau d’isolement correct pour une telle chose ?

@Entity public class Account { @Id private Identifiant long ; double solde privé ; } …//Service @Transactional void createTransaction(double montant, long fromAccountId, long toAccountId) { Compte fromAccount = référentiel.findById(fromAccountId); Compte toAccount = référentiel.findById(toAccountId); if (fromAccount.getBalance() < montant) { throw new IllegalStateException(); } fromAccount.setBalance(fromAccount.getBalance() - montant); toAccount.setBalance(toAccount.getBalance() + montant); référentiel.save(fromAccount); référentiel.save(toAccount); // Enregistrez également du, au, le montant et l'heure dans une table de transactions } }

Maintenant, mon problème est la concurrence lorsque plusieurs demandes de ce type arrivent ? Comment y remédier pour éviter des données incohérentes. Le ReadCommit par défaut convient-il ici ? Je pense que seul Serialisable résoudra probablement le problème ici, mais je ne suis pas tout à fait sûr, ou devrais-je simplement utiliser des verrous manuels en lecture-écriture Java ici pour des raisons de cohérence ?

Lire aussi  La vente au rabais de fin d'année de Wuling Almaz atteint 80 millions IDR

Ma principale préoccupation est de savoir ce qui se passe si je lis fromBalance et qu’il était supérieur au montant, mais entre-temps, je le mettais à jour, une autre demande l’a réduit, maintenant je serai dans un état incohérent et je devrais en fait lever une exception.

Je pourrais même avoir une nouvelle requête complète pour simplement getBalance() mais je ne pense pas que cela soit très important, le principal problème est de faire fonctionner correctement createTransaction.



#postgresql #Niveau #disolation #des #transactions #pour #déplacer #largent
1712344592

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT