Table des matières
1. Méthode de contrôle des transactions dans Spring
2.3 TransactionStatus
effectue la gestion des transactions en lisant
, puis une série de #🎜 sera généré 🎜#事STATUS
4.基于注解的声明式事务控制(重点)
4.1 修改service层,增加事务注解
4.2修改spring核心配置文件,开启事务注解支持
4.3纯注解方式
Maison Java javaDidacticiel Quels sont les deux types de transactions dans Java Spring ?

Quels sont les deux types de transactions dans Java Spring ?

May 16, 2023 pm 04:07 PM
java spring

    1. Méthode de contrôle des transactions dans Spring

    Le contrôle des transactions de Spring peut être divisé en Transactions programmatiques #🎜 🎜#Contrôle et Transactions déclaratives Contrôle.

    Programmatic

    Les développeurs associent directement le code de transaction et le code métier, ce qui n'est pas utilisé dans le développement réel.

    Declarative

    Les développeurs utilisent la configuration pour contrôler les transactions, dissocier le code métier et le code de transaction et utiliser AOP Thought.

    2. Objets liés au contrôle programmatique des transactions

    2.1PlatformTransactionManager

    L'interface PlatformTransactionManager est l'interface du gestionnaire de transactions de Spring, qui fournit notre méthode couramment utilisée pour gérer les transactions. .

    Quels sont les deux types de transactions dans Java Spring ?

    Quels sont les deux types de transactions dans Java Spring ?

    2.2TransactionDefinition

    L'interface TransactionDefinition fournit des informations de définition de transaction ( Niveau d'isolement des transactions, comportement de propagation des transactions, etc.) 🎜#Définissez le niveau d'isolement pour résoudre les problèmes causés par la concurrence des transactions, tels que les lectures sales, les lectures non répétables et les lectures virtuelles (lectures fantômes).

    RemarqueQuels sont les deux types de transactions dans Java Spring ? : Utilisez le niveau par défaut de la base de données. Si la base de données est MySQL, la valeur par défaut est une lecture répétable, Oracle est validé en lecture.

    ISOLATION_DEFAULT Utiliser le niveau par défaut de la base de données ISOLATION_READ_UNCOMMITTED Lire non validé

    ISOLATION_READ_COMMITTED Lecture validée (peut résoudre le problème de lecture sale)

    ISOLATION_REPEATABLE_READ Lecture répétable (peut résoudre le problème de lecture sale, lecture non répétable)#🎜 🎜# ISOLATION_SERIALIZABLE La sérialisation

    peut être résolue : ISOLATION_DEFAULT 使用数据库默认级别

    ISOLATION_READ_UNCOMMITTED 读未提交

    ISOLATION_READ_COMMITTED 读已提交(可解决脏读问题)

    ISOLATION_REPEATABLE_READ 可重复读 (可解决脏读、不可重复读)

    ISOLATION_SERIALIZABLE 串行化

    可解决:

    Quels sont les deux types de transactions dans Java Spring ?

    (2)事务传播行为

    事务传播行为指的就是当一个业务方法【被】另一个业务方法调用时,应该如何进行事务控制。

    Quels sont les deux types de transactions dans Java Spring ?

    重点:

    Quels sont les deux types de transactions dans Java Spring ?

    • read-only(是否只读):建议查询时设置为只读

    • timeout(超时时间):默认值是-1,没有超时限制。如果有,以秒为单位进行设置

    2.3 TransactionStatus

    TransactionStatus 接口提供的是事务具体的运行状态。

    Quels sont les deux types de transactions dans Java Spring ?

    可以简单的理解三者的关系:事务管理器通过读取事务定义参数进行事务管理,然后会产生一系列的事务状态。

    Spring中的事务控制主要就是通过这三个API实现的

    PlatformTransactionManager 负责事务的管理,它是个接口,其子类负责具体工作

    TransactionDefinition 定义了事务的一些相关参数

    TransactionStatus

    Quels sont les deux types de transactions dans Java Spring (2) Comportement de propagation des transactions Le comportement de propagation des transactions fait référence à la manière dont le contrôle des transactions doit être effectué lorsqu'une méthode métier est appelée par une autre méthode métier.

    Quelles sont les deux transactions de Java Spring

    Point clé :

    Quelles sont les deux transactions de Java Spring

    • lecture seule (lecture seule ou non) : Il est recommandé de le définir en lecture seule lors de l'interrogation de

    • timeout (délai d'expiration ) : La valeur par défaut est -1, il n'y a pas de limite de délai d'attente. Si tel est le cas, définissez-le en secondes

    • 2.3 TransactionStatus

      L'interface TransactionStatus fournit l'état d'exécution spécifique de la transaction.

      Quelles sont les deux transactions de Java Spring

      Vous pouvez simplement comprendre la relation entre les trois : le gestionnaire de transactions effectue la gestion des transactions en lisant les paramètres de définition de la transaction, puis génère une série d'états de transaction.

      Le contrôle des transactions dans Spring est principalement implémenté via ces trois API

      PlatformTransactionManager est responsable de la gestion des transactions. un travail spécifique

      TransactionDefinition définit certains paramètres pertinents de la transaction

      TransactionStatus représente un statut en temps réel de la transaction running# 🎜🎜#

      Comprendre la relation entre les trois :

      Transaction manager
      effectue la gestion des transactions en lisant
      paramètres de définition de transaction
      , puis une série de #🎜 sera généré 🎜#事STATUS
      .
      3. Contrôle déclaratif des transactions basé sur XML [Points clés]

      Traitement déclaratif des transactions dans le fichier de configuration Spring au lieu du traitement du code. La couche inférieure est implémentée à l'aide des idées AOP.

      Le contrôle déclaratif des transactions est clair :

      Code métier principal (objet cible) (Qui est le point d'entrée ?)

      # 🎜🎜#Code d'amélioration des transactions (Spring a fourni un gestionnaire de transactions)) (Qui est notifié ?) #🎜🎜##🎜🎜#Configuration des aspects (Comment configurer les aspects ?) (Aspect = pointcut + notification)#🎜🎜## 🎜🎜#3.1 Démarrage rapide#🎜🎜##🎜🎜# Utilisez les transactions déclaratives du printemps pour contrôler l'activité de transfert. #🎜🎜##🎜🎜##🎜🎜#Étapes : #🎜🎜##🎜🎜##🎜🎜#1.Présentation de l'espace de noms tx#🎜🎜##🎜🎜#2.Configuration des notifications du gestionnaire de transactions#🎜🎜 # #🎜🎜#3. Configuration AOP du gestionnaire de transactions #🎜🎜##🎜🎜#4. Testez le code commercial de transfert de contrôle des transactions #🎜🎜##🎜🎜#(1) Introduire l'espace de noms tx #🎜🎜#
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xsi:schemaLocation="
             	http://www.springframework.org/schema/beans
      		http://www.springframework.org/schema/beans/spring-beans.xsd
             	http://www.springframework.org/schema/context
      		http://www.springframework.org/schema/context/spring-context.xsd
      		http://www.springframework.org/schema/tx
      		http://www.springframework.org/schema/tx/spring-tx.xsd
      		http://www.springframework.org/schema/aop
      		http://www.springframework.org/schema/aop/spring-aop.xsd
      ">
      Copier après la connexion
      #🎜 🎜#( 2)Configuration de notification du gestionnaire de transactions#🎜🎜#
        <!--事务管理器对象-->
          <!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
          </bean>--> 
      // 通知增强
          <tx:advice id="txAdvice" transaction-manager="transactionManager">
             //定义事务的一些属性 * 表示当前任意名称的方法都走默认配置
           <!--
                  name: 切点方法名称
                  isolation:事务的隔离级别
                  propagation:事务的传播行为
                  read-only:是否只读
                  timeout:超时时间
              -->
              <tx:attributes>
                  <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" timeout="-1"/>
                  //CRUD常用配置
                  <tx:method name="save*" propagation="REQUIRED"/>
                  <tx:method name="delete*" propagation="REQUIRED"/>
                  <tx:method name="update*" propagation="REQUIRED"/>
                  <tx:method name="find*" read-only="true"/>
                  <tx:method name="*"/>
              </tx:attributes>
          </tx:advice>
      Copier après la connexion
      #🎜🎜#(3)Configuration AOP du gestionnaire de transactions #🎜🎜##🎜🎜#Lorsque vous utilisez Spring pour gérer les transactions de manière déclarative, utilisez la configuration aop:advisor aop ! #🎜🎜#
      //aop配置:配置切面   
      <aop:config>  
              <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.lagou.servlet.impl.AccountServiceImpl.*(..))"/>
          </aop:config>-->
      Copier après la connexion
      #🎜🎜##🎜🎜# Configuration détaillée des paramètres de transaction : #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#
      • name:切点方法名称

      • isolation:事务的隔离级别

      • propogation:事务的传播行为

      • timeout:超时时间

      • read-only:是否只读

      4.基于注解的声明式事务控制(重点)

      步骤:

      • 修改service层,增加事务注解

      • 修改spring核心配置文件,开启事务注解支持

      4.1 修改service层,增加事务注解

      @Service
      public class AccountServiceImpl implements AccountService {
        @Autowired
        private AccountDao accountDao;
          @Transactional(propagation = Propagation.REQUIRED, isolation =
      Isolation.REPEATABLE_READ, timeout = -1, readOnly = false)
        @Override
        public void transfer(String outUser, String inUser, Double money) {
          accountDao.out(outUser, money);
          int i = 1 / 0;
          accountDao.in(inUser, money);
       }
      }
      Copier après la connexion

      4.2修改spring核心配置文件,开启事务注解支持

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w2.org/2001/XMLSchema-instance"
         xmlns:context="http://www.springframework.org/schema/context"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="
         http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd">
        <!--省略之前datsSource、jdbcTemplate、组件扫描配置-->
        <!--事务管理器-->
        <bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"></property>
        </bean>
        <!--事务的注解支持-->
        <tx:annotation-driven/>
      </beans
      Copier après la connexion

      4.3纯注解方式

      核心配置类:

      @Configuration  // 声明该类为核心配置类
      @ComponentScan("com.lagou")  // 包扫描
      @Import(DataSourceConfig.class) //导入其他配置类
      @EnableTransactionManagement //事务的注解驱动
      public class SpringConfig {
          @Bean
          public JdbcTemplate getJdbcTemplate(@Autowired DataSource dataSource){
              JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
              return jdbcTemplate;
          }
          @Bean
          public PlatformTransactionManager getPlatformTransactionManager(@Autowired DataSource dataSource){
              DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
              return dataSourceTransactionManager;
          }
      }
      Copier après la connexion

      数据源配置类:

      @PropertySource("classpath:jdbc.properties") //引入properties文件
      public class DataSourceConfig {
          @Value("${jdbc.driverClassName}")
          private String driver;
          @Value("${jdbc.url}")
          private String url;
          @Value("${jdbc.username}")
          private String username;
          @Value("${jdbc.password}")
          private String password;
          @Bean //会把当前方法的返回值对象放进IOC容器中
          public DataSource getDataSource(){
              DruidDataSource druidDataSource = new DruidDataSource();
              druidDataSource.setDriverClassName(driver);
              druidDataSource.setUrl(url);
              druidDataSource.setUsername(username);
              druidDataSource.setPassword(password);
              return druidDataSource;
          }
      }
      Copier après la connexion

    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)
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Comment déverrouiller tout dans Myrise
    3 Il y a quelques semaines 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)

    Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

    Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

    Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

    Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

    Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

    Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

    Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

    Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

    Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

    Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

    Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

    Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

    Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

    Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

    See all articles