L'annotation @Transactional de Spring offre deux paramètres cruciaux, l'isolation et la propagation, pour personnaliser le comportement des transactions. Examinons ces paramètres et explorons leurs implications dans des scénarios du monde réel.
La propagation définit la relation entre les transactions. Les options les plus courantes incluent :
En règle générale, REQUIRED sert la plupart des scénarios. Cependant, REQUIRES_NEW est approprié lorsqu'il est primordial de garantir l'isolement complet des transactions.
L'isolement garantit l'intégrité des données en spécifiant comment les transactions interagissent les unes avec les autres. Les options clés incluent :
L'inconvénient des niveaux d'isolation plus stricts (par exemple, SERIALIZABLE) est la réduction des performances dans les applications multithread. Il est donc conseillé d'examiner attentivement les compromis en fonction des besoins de l'application.
Protection contre les conflits de données avec des lectures sales :
Un exemple classique de lecture sale se produit lorsque le thread 1 écrit une valeur dans une ligne de base de données, puis annule la transaction, laissant l'ancienne valeur dans la base de données. Si le thread 2 lit simultanément la ligne, il verra l'ancienne valeur (maintenant incorrecte). Pour éviter de telles incohérences, nous pouvons utiliser ISOLATION_READ_COMMITTED.
Application de l'isolation des transactions :
Une application pratique de la propagation REQUIRES_NEW réside dans une méthode de service qui doit toujours s'exécuter de manière complètement transaction isolée. Considérez la méthode suivante :
<code class="java">@Transactional(propagation=Propagation.REQUIRES_NEW) public void provideService() { repo1.retrieveFoo(); repo2.retrieveFoo(); }</code>
Cette méthode garantit que toutes les modifications apportées aux référentiels repo1 et repo2 sont isolées des autres transactions, évitant ainsi les interférences potentielles et maintenant la cohérence des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!