Contenu du cours
Backend Spring Boot
Backend Spring Boot
Transactions
Une transaction nous offre essentiellement un choix : soit toutes les opérations qu'elle contient sont réalisées avec succès, soit aucune d'elles n'est exécutée.
Imaginez une opération de transfert bancaire, où de l'argent est déplacé d'un compte à un autre. Ce processus implique deux étapes :
- Déduire de l'argent d'un compte ;
- Déposer de l'argent sur un autre compte.
Si la transaction échoue après avoir déduit de l'argent mais avant de l'avoir déposé, les fonds pourraient être "perdus". Une transaction garantit que les deux opérations sont soit entièrement complétées, soit entièrement annulées.
Notions de base de la gestion des transactions
L'annotation @Transactional
: Elle est utilisée pour déclarer des méthodes ou des classes qui doivent être exécutées dans le contexte d'une transaction.
Lorsqu'une méthode avec cette annotation est appelée, Spring démarre une nouvelle transaction. Si la méthode se termine avec succès, la transaction est validée ; sinon, elle est annulée.
Fournissons un exemple basé sur le scénario réel mentionné précédemment.
BankService
@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); } }
Lorsque la méthode transferMoney
est marquée avec l'annotation @Transactional
, cela signifie que tous les changements se produisant au sein de cette méthode seront exécutés dans une transaction unique.
Lorsque nous appelons fromAccount.withdraw(amount)
suivi de toAccount.deposit(amount)
, ces deux actions doivent être complétées avec succès. Si, par exemple, une erreur survient lors de l'opération toAccount.deposit(amount)
, la transaction annulera automatiquement les changements effectués lors de l'étape fromAccount.withdraw(amount)
.
Cela assure que soit les deux opérations sont exécutées et l'argent est transféré, soit, en cas d'erreur, aucune opération n'est effectuée, prévenant toute perte de fonds. La transaction garantit que la base de données ne sera jamais laissée dans un état incohérent.
Application Pratique des Transactions
Résumé
Une transaction est un ensemble d'opérations de base de données traitées comme une unité unique, garantissant que toutes les opérations réussissent ensemble ou sont complètement annulées en cas d'échec. Vous pouvez en apprendre plus sur les transactions ici.
Merci pour vos commentaires !