Parlons des « transactions du printemps »

Introduction aux transactions de printemps

Le framework Spring est un framework léger pour le développement d'applications d'entreprise Java. Parmi eux, Spring prend en charge les transactions, permettant aux développeurs d'implémenter facilement la gestion des transactions dans le programme, garantissant ainsi la cohérence et l'intégrité des données de l'application.

Implémentation des transactions Spring Spring propose deux méthodes de gestion des transactions :

  1. Gestion des transactions programmatiques
  2. Gestion déclarative des transactions

Gestion des transactions programmatiques La gestion des transactions programmatiques permet aux utilisateurs de définir avec précision les limites des transactions dans leur code. Dans ce mode, les développeurs doivent acquérir et libérer manuellement les connexions, démarrer et valider manuellement les transactions, etc., pour contrôler les limites des transactions. Spring propose deux classes, TransactionTemplate et PlatformTransactionManager, pour prendre en charge la gestion programmatique des transactions.

  • TransactionTemplate : encapsule certaines méthodes d'opération de transaction courantes, telles que l'exécution d'opérations de base de données et la soumission de transactions, l'exécution d'opérations de base de données mais la non soumission de transactions, etc., ce qui peut grandement simplifier la quantité de code pour la gestion programmatique des transactions.
  • PlatformTransactionManager : interface du gestionnaire de transactions, qui contient la définition de méthodes telles que le démarrage d'une transaction, la validation d'une transaction et l'annulation d'une transaction. Spring propose une variété d'implémentations de gestionnaires de transactions, telles que DataSourceTransactionManager, HibernateTransactionManager, JpaTransactionManager, etc., pour s'adapter à différentes sources de données et cadres de persistance.

Gestion déclarative des transactions La gestion déclarative des transactions est la méthode la plus couramment utilisée et recommandée pour les transactions Spring. Dans ce mode, les développeurs utilisent la technologie AOP de Spring pour séparer les problèmes de transaction du code de logique métier, former un aspect de transaction indépendant et contrôler les limites de la transaction en spécifiant la configuration de l'aspect de transaction. Plus précisément, les développeurs doivent effectuer les trois étapes suivantes :

  1. Déclarez TransactionManager dans le fichier de configuration Spring pour gérer les transactions ;
  2. Ajoutez l'annotation @Transactional à la méthode de logique métier pour indiquer que la méthode doit démarrer une transaction ;
  3. Définissez divers attributs de l'annotation @Transactional en fonction des exigences, telles que le niveau d'isolement, les règles de restauration, etc.

Par rapport à la gestion programmatique des transactions, la gestion déclarative des transactions est plus concise et claire et peut séparer la gestion des transactions et le code de logique métier, améliorant ainsi la lisibilité et la maintenabilité du code.

Le framework Spring prend en charge plusieurs niveaux d'isolation des transactions, comme suit :

  • DEFAULT : utilise le niveau d'isolement par défaut de la base de données sous-jacente.
  • READ_UNCOMMITTED : permet la lecture des modifications de données non validées. Il existe des problèmes avec les lectures incorrectes, les lectures fantômes et les lectures non répétables.
  • READ_COMMITTED : seules les modifications de données validées peuvent être lues pour éviter les lectures sales, mais des problèmes peuvent survenir avec les lectures fantômes et les lectures non répétables.
  • REPEATABLE_READ : garantit que les résultats de la lecture des données plusieurs fois dans la même plage de transactions sont les mêmes, évitant ainsi les lectures sales et les lectures non répétables, mais le problème des lectures fantômes peut toujours exister.
  • SÉRIALISABLE : niveau d'isolement le plus élevé, obligeant les transactions à être exécutées en série pour éviter les lectures sales, les lectures non répétables et les lectures fantômes.

Vous pouvez spécifier le niveau d'isolement à utiliser via l'attribut d'isolation de l'annotation @Transactional. S'il n'est pas spécifié, le niveau DEFAULT est utilisé par défaut.

Vous pouvez spécifier le niveau d'isolement de la transaction via l'attribut d'isolation dans l'annotation @Transactional, tel que :

@Transactional(isolation = Isolation.READ_COMMITTED)
public void updateUserBalance(String userId, BigDecimal amount) {
    // ...
}

Le comportement de propagation des transactions Spring fait référence à la manière de gérer la relation entre ces transactions dans un scénario dans lequel plusieurs méthodes de transaction s'appellent. Spring propose 7 types de comportements de propagation des transactions, comme suit :

  • OBLIGATOIRE (par défaut) : si une transaction existe actuellement, rejoignez-la ; sinon, créez une nouvelle transaction et exécutez-la dans sa propre portée de transaction.
  • SUPPORTS : si une transaction existe actuellement, rejoignez-la ; sinon, exécutez-la de manière non transactionnelle.
  • OBLIGATOIRE : doit être exécuté dans une transaction existante, sinon une exception sera levée.
  • REQUIRES_NEW : une nouvelle exécution de transaction doit être démarrée. Si une transaction existe actuellement, la transaction en cours est suspendue.
  • NOT_SUPPORTED : effectue l'opération de manière non transactionnelle. Si une transaction existe actuellement, la transaction en cours est suspendue.
  • JAMAIS : effectuez l'opération de manière non transactionnelle et lancez une exception si une transaction existe actuellement.
  • NESTED : si une transaction existe actuellement, elle sera imbriquée et exécutée dans la transaction ; sinon, une nouvelle transaction sera créée et exécutée dans sa propre portée de transaction.

Vous pouvez spécifier le comportement de propagation de la transaction via l'attribut de propagation dans l'annotation @Transactional. La valeur par défaut est OBLIGATOIRE. Par exemple:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateUserBalance(String userId, BigDecimal amount) {
    // ...
}

Le niveau d'isolement et le comportement de propagation dans la gestion des transactions Spring peuvent être utilisés simultanément. Lorsque vous utilisez l'annotation @Transactional, vous pouvez spécifier les attributs d'isolation et de propagation en même temps. L'exemple est le suivant :

@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW)
public void updateUserBalance(String userId, BigDecimal amount) {
    // ...
}

Le code ci-dessus spécifie le niveau d'isolement des transactions comme READ_COMMITTED et le comportement de propagation comme REQUIRES_NEW. Cela signifie que lorsque cette méthode est appelée, une nouvelle transaction sera créée et le niveau d'isolement de la transaction est READ_COMMITTED.

Il convient de noter que différents niveaux d'isolement et comportements de propagation auront des impacts différents sur les transactions.Il est nécessaire de sélectionner le niveau d'isolement et le comportement de propagation appropriés en fonction de scénarios commerciaux spécifiques pour garantir la cohérence et l'exactitude des données.

Guess you like

Origin blog.csdn.net/samsung_samsung/article/details/130368717