Table des matières
Transaction
Caractéristiques de la transaction
Problèmes causés si les caractéristiques ne sont pas remplies
Lire le numéro
Problème d'écriture
Résoudre le problème de lecture
Définir le niveau d'isolement des transactions
API de gestion des transactions de Spring
Les sept types de comportements de propagation des transactions dans Spring
Transaction imbriquée
pour vous assurer que l'opération est dans la même Dans la transaction
S'assurer que les opérations ne sont pas dans la même Dans la transaction
Spring propose deux méthodes de gestion des transactions
Gestion déclarative des transactions
est basée sur XML
基于注解
基于xml的事务和基于注解的事务对比
Maison Java javaDidacticiel Introduction pertinente à la gestion des transactions Spring (avec code)

Introduction pertinente à la gestion des transactions Spring (avec code)

Oct 09, 2018 pm 02:34 PM
spring

Cet article vous apporte une introduction pertinente à la gestion des transactions Spring (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Transaction

Un ensemble logique d'opérations dont chaque partie réussit ou échoue

Caractéristiques de la transaction

  • Cohérence : L'intégrité des données reste cohérente avant et après la transaction

  • Atomicité : les transactions ne peuvent pas être divisées, soit toutes réussissent, soit toutes échouent

  • Isolement : l'exécution des transactions n'est pas affectée par d'autres transactions et est isolée les unes des autres

  • Persistance : Une fois qu'une transaction est terminée, elle sera enregistrée dans la base de données et n'est pas affectée par le système Impact de crash

Problèmes causés si les caractéristiques ne sont pas remplies

Problèmes causés par l'isolement :

Lire le numéro

  • Lecture sale : une transaction lit des données qui n'ont pas été validées par d'autres transactions

  • Lecture non répétable : une transaction lit mise à jour soumise par d'autres transactions Données , entraînant des résultats de requête incohérents

  • Lecture fantôme : une transaction lit les données d'insertion d'une autre transaction , ce qui entraîne des résultats de requête incohérents

Problème d'écriture

  • Opération perdue

Résoudre le problème de lecture

Définir le niveau d'isolement des transactions

Introduction pertinente à la gestion des transactions Spring (avec code)

   int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
Copier après la connexion
  • ISOLATION_DEFAULT : Représente la valeur par défaut de Spring, indiquant l'utilisation du niveau d'isolement par défaut de la base de données sous-jacente. Par exemple, MySQL utilise ISOLATION_REPEATABLE_READ et utilise ISOLATION_READ_COMMITTED

  • ISOLATION_READ_UNCOMMITTED : lecture non validée, ne peut pas résoudre le problème de lecture

  • ISOLATION_READ_COMMITTED : lecture validée, peut résoudre le sale problème Lire, ne peut pas résoudre les lectures fantômes et les lectures non répétables

  • ISOLATION_REPEATABLE_READ : les lectures répétées, peuvent résoudre les lectures sales et les lectures non répétables

  • ISOLATION_SERIALIZABLE : peut résoudre tous les problèmes de lecture, l'efficacité n'est pas élevée

API de gestion des transactions de Spring

PlatformTransactionManager : gestionnaire de transactions de plateforme
PlatformTransactionManager est une interface qui est utilisé par la couche inférieure de Spring Object pour gérer les transactions.
Introduction pertinente à la gestion des transactions Spring (avec code)

public interface PlatformTransactionManager {
    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    void commit(TransactionStatus status) throws TransactionException;
    void rollback(TransactionStatus status) throws TransactionException;
}
Copier après la connexion

Adresse du site officiel de Spring Thing
Les classes d'implémentation les plus courantes sont :

  1. DataSourceTransactionManager : Couche inférieure Utiliser la gestion des transactions JDBC

  2. HibernateTransactionManager : La couche inférieure utilise la gestion des transactions Hibernate

  • TransactionDefinition :
    Définition de la transaction : OK Définir les informations relatives à la transaction, le comportement de propagation de la transaction, le niveau d'isolement, les informations de délai d'attente, s'il faut lire uniquement

package org.springframework.transaction;

//可以看到事物的定义也是一个接口
public interface TransactionDefinition {
    //事物的传播行为,7种
    int PROPAGATION_REQUIRED = 0;
    int PROPAGATION_SUPPORTS = 1;
    int PROPAGATION_MANDATORY = 2;
    int PROPAGATION_REQUIRES_NEW = 3;
    int PROPAGATION_NOT_SUPPORTED = 4;
    int PROPAGATION_NEVER = 5;
    int PROPAGATION_NESTED = 6;
    
    //事物的隔离级别五种
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;

    //事物的超时时间,-1代表没有超时时间
    int TIMEOUT_DEFAULT = -1;

    int getPropagationBehavior();

    int getIsolationLevel();

    int getTimeout();

    boolean isReadOnly();

    String getName();
}
Copier après la connexion
  • TransactionStatus : Statut de la transaction
    Statut de la transaction : objets qui enregistrent l'état de la transaction pendant le processus de gestion des transactions

Les sept types de comportements de propagation des transactions dans Spring

Les comportements de propagation des transactions sont utilisés pour résoudre le problème des appels mutuels entre méthodes métiers Problème

Portail du site officiel

Précondition :
Appeler la méthode A() dans la méthode B()

Transaction imbriquée

  • PROPAGATION_NESTED : Il y a une transaction dans A, et la transaction A est exécutée normalement. Une fois la transaction A exécutée, définissez un point de sauvegarde et effectuez l'opération B. Si B lève une exception, vous pouvez revenir à la position initiale ou revenir au point de sauvegarde

pour vous assurer que l'opération est dans la même Dans la transaction

  • PROPAGATION_REQUIRED : Si la méthode B appelle la méthode A et que la méthode A a une transaction, la méthode B utilisera la transaction dans A. S'il n'y a pas de transaction dans A, B créera une transaction

  • PROPAGATION_SUPPORTS : B appelle A, s'il y a une transaction dans A, la transaction dans A sera utilisée. S'il y a. aucune transaction dans A, B n'utilisera pas la transaction

  • PROPAGATION_MANDATORY : Si A a une transaction, utilisez la transaction dans A, et il n'y a pas de transaction dans A, lancez une exception

S'assurer que les opérations ne sont pas dans la même Dans la transaction

  • PROPAGATION_REQUIRES_NEW : Il y a une transaction dans A, suspendez la transaction A, et le La transaction ouverte de B ne comprend que ses propres opérations. Il n'y a pas de transaction dans A, et la transaction créée par B ne contient que sa propre opération

  • PROPAGATION_NOT_SUPPORTED : Il y a une transaction dans A, A est suspendu et B n'utilise pas la transaction
    *PROPAGATION_NEVER : Il y a une transaction dans A et B est levée. Exception

Spring propose deux méthodes de gestion des transactions

  • Gestion déclarative des transactions : Traiter les transactions de manière déclarative dans le fichier de configuration Spring Pour remplacer le traitement des transactions basé sur le code (utilisé plus souvent)

  • Programmation de la gestion des transactions : le traitement des transactions basé sur le code nécessite l'écriture de code dans le programme

    Gestion déclarative des transactions

    est basée sur XML

<!--配置事务管理器-->
    <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" ></property>
    </bean>
<!--配置事务-->
    <tx:advice id="myAdvice" transaction-manager="trancationManager">
        <tx:attributes>
            <!--配置事务传播和事务隔离-->
            <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    <!--事务是利用aop实现的-->
    <aop:config>
        <aop:pointcut id="ponitcut" expression="execution(* com.amber.xml.service.AccountServiceImpl.transferMoney(..))"></aop:pointcut>
        <aop:advisor advice-ref="myAdvice" pointcut-ref="ponitcut" />
    </aop:config>
Copier après la connexion

save* représente une méthode commençant par save, utilise la propagation de transaction PROPATATION_REQUIRED et utilise la transaction REPEATABLE_READ isolement

基于注解

<!--配置事务管理器-->
    <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" ></property>
    </bean>
    <!--开启注解事务-->
    <tx:annotation-driven transaction-manager="trancationManager" />
Copier après la connexion

使用tx:annotation-driven 开启事务的注解后,在使用的时候只需要在类或者方法上加入@Transactional就可以开启注解

基于xml的事务和基于注解的事务对比

  • 文件配置对比
    事务基于注解简化了xml中的

  • 使用比较
    使用注解必须在类或者方法上添加@Trasactional,如果有多个业务类,则需要在每个业务类上添加
    使用xml只需要在配置文件中配置包名即可

事务github代码

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un nouveau paradigme de programmation, quand Spring Boot rencontre OpenAI Un nouveau paradigme de programmation, quand Spring Boot rencontre OpenAI Feb 01, 2024 pm 09:18 PM

En 2023, la technologie de l’IA est devenue un sujet brûlant et a un impact énorme sur diverses industries, notamment dans le domaine de la programmation. Les gens sont de plus en plus conscients de l’importance de la technologie de l’IA, et la communauté Spring ne fait pas exception. Avec l’évolution continue de la technologie GenAI (Intelligence Artificielle Générale), il est devenu crucial et urgent de simplifier la création d’applications dotées de fonctions d’IA. Dans ce contexte, « SpringAI » a émergé, visant à simplifier le processus de développement d'applications fonctionnelles d'IA, en le rendant simple et intuitif et en évitant une complexité inutile. Grâce à « SpringAI », les développeurs peuvent plus facilement créer des applications dotées de fonctions d'IA, ce qui les rend plus faciles à utiliser et à exploiter.

Utilisez Spring Boot et Spring AI pour créer des applications d'intelligence artificielle générative Utilisez Spring Boot et Spring AI pour créer des applications d'intelligence artificielle générative Apr 28, 2024 am 11:46 AM

En tant que leader du secteur, Spring+AI fournit des solutions de pointe pour divers secteurs grâce à son API puissante et flexible et ses fonctions avancées. Dans cette rubrique, nous examinerons les exemples d'application de Spring+AI dans divers domaines. Chaque cas montrera comment Spring+AI répond à des besoins spécifiques, atteint ses objectifs et étend ces LEÇONS APPRISES à une gamme plus large d'applications. J'espère que ce sujet pourra vous inciter à comprendre et à utiliser plus profondément les possibilités infinies de Spring+AI. Le framework Spring a une histoire de plus de 20 ans dans le domaine du développement logiciel, et cela fait 10 ans que la version Spring Boot 1.0 est sortie. Maintenant, personne ne peut contester ce printemps

Quelles sont les méthodes de mise en œuvre des transactions programmatiques Spring ? Quelles sont les méthodes de mise en œuvre des transactions programmatiques Spring ? Jan 08, 2024 am 10:23 AM

Comment implémenter les transactions programmatiques Spring : 1. Utilisez TransactionTemplate ; 2. Utilisez TransactionCallback et TransactionCallbackWithoutResult ; 3. Utilisez les annotations Transactional ; 4. Utilisez TransactionTemplate en combinaison avec @Transactional ;

Comment implémenter des tâches planifiées dans Java Spring Comment implémenter des tâches planifiées dans Java Spring May 24, 2023 pm 01:28 PM

Java implémente les tâches planifiées dans la bibliothèque fournie avec Jdk, il existe deux façons d'implémenter les tâches planifiées, l'une est Timer et l'autre est ScheduledThreadPoolExecutor. Lorsque Timer+TimerTask crée un Timer, il crée un thread, qui peut être utilisé pour planifier des tâches TimerTask. Timer a quatre méthodes de construction, et vous pouvez spécifier le nom du thread Timer et s'il doit être défini comme thread démon. Le nom par défaut est Timer-number et il ne s'agit pas d'un thread démon par défaut. Il existe trois méthodes principales : cancel() : mettre fin à la planification des tâches et annuler toutes les tâches actuellement planifiées. purge() : supprimer les tâches de la file d'attente des tâches.

Les différences et les connexions entre Spring Boot et Spring Cloud Les différences et les connexions entre Spring Boot et Spring Cloud Jun 22, 2023 pm 06:25 PM

SpringBoot et SpringCloud sont tous deux des extensions de Spring Framework qui aident les développeurs à créer et déployer des applications de microservices plus rapidement, mais elles ont chacune des objectifs et des fonctions différents. SpringBoot est un framework permettant de créer rapidement des applications Java, permettant aux développeurs de créer et de déployer plus rapidement des applications basées sur Spring. Il fournit un moyen simple et facile à comprendre de créer des applications Spring autonomes et exécutables.

Les 7 annotations les plus utilisées dans Spring, l'organisation la plus puissante de l'histoire ! Les 7 annotations les plus utilisées dans Spring, l'organisation la plus puissante de l'histoire ! Jul 26, 2023 pm 04:38 PM

Avec la mise à jour et l'itération de la technologie, Java5.0 a commencé à prendre en charge les annotations. En tant que framework leader en Java, Spring a lentement commencé à abandonner la configuration XML depuis sa mise à jour vers la version 2.5, et davantage d'annotations sont utilisées pour contrôler le framework Spring.

Comment définir le niveau d'isolement des transactions au printemps Comment définir le niveau d'isolement des transactions au printemps Jan 26, 2024 pm 05:38 PM

Comment définir le niveau d'isolement des transactions dans Spring : 1. Utilisez l'annotation @Transactional ; 2. Définissez-le dans le fichier de configuration Spring ; 3. Utilisez PlatformTransactionManager ; Introduction détaillée : 1. Utilisez l'annotation @Transactional, ajoutez l'annotation @Transactional à la classe ou à la méthode qui nécessite la gestion des transactions et définissez le niveau d'isolement dans l'attribut 2. Dans le fichier de configuration Spring, etc.

Apprenez Spring Cloud à partir de zéro Apprenez Spring Cloud à partir de zéro Jun 22, 2023 am 08:11 AM

En tant que développeur Java, apprendre et utiliser le framework Spring est une compétence essentielle. Avec la popularité du cloud computing et des microservices, apprendre et utiliser Spring Cloud est devenu une autre compétence qui doit être maîtrisée. SpringCloud est un ensemble d'outils de développement basé sur SpringBoot permettant de créer rapidement des systèmes distribués. Il fournit aux développeurs une série de composants, notamment l'enregistrement et la découverte de services, un centre de configuration, l'équilibrage de charge et des disjoncteurs, etc., permettant aux développeurs de créer des micro-ordinateurs.

See all articles