Inhaltsverzeichnis
1. Die Transaktionssteuerungsmethode von Spring
2.3 TransactionStatus
führt die Transaktionsverwaltung durch, indem er
liest und dann eine Reihe von #🎜 wird generiert 🎜#事STATUS
4.基于注解的声明式事务控制(重点)
4.1 修改service层,增加事务注解
4.2修改spring核心配置文件,开启事务注解支持
4.3纯注解方式
Heim Java javaLernprogramm Welche zwei Arten von Transaktionen gibt es in Java Spring?

Welche zwei Arten von Transaktionen gibt es in Java Spring?

May 16, 2023 pm 04:07 PM
java spring

    1. Die Transaktionssteuerungsmethode von Spring

    Die Transaktionssteuerung von Spring kann in Programmatische Transaktionen #🎜 unterteilt werden 🎜#Kontrolle und Deklarative Transaktionen Kontrolle.

    Programmatic

    Entwickler koppeln Transaktionscode und Geschäftscode direkt miteinander, was in der tatsächlichen Entwicklung nicht verwendet wird.

    Deklarativ

    Entwickler verwenden Konfiguration, um Transaktionskontrolle zu erreichen, Geschäftscode und Transaktionscode zu entkoppeln und AOP Thought zu verwenden.

    2. Objekte im Zusammenhang mit der programmgesteuerten Transaktionssteuerung

    2.1PlatformTransactionManager

    PlatformTransactionManager-Schnittstelle ist die Transaktionsmanagerschnittstelle von Spring, die unsere häufig verwendete Methode zum Betreiben von Transaktionen bereitstellt .

    Welche zwei Arten von Transaktionen gibt es in Java Spring?

    Welche zwei Arten von Transaktionen gibt es in Java Spring?

    2.2TransactionDefinition

    Die TransactionDefinition-Schnittstelle stellt Transaktionsdefinitionsinformationen bereit ( (Transaktionsisolationsstufe, Transaktionsausbreitungsverhalten usw.) 🎜#Legen Sie die Isolationsstufe fest, um Probleme zu lösen, die durch die Parallelität von Transaktionen verursacht werden, wie z. B. Dirty Reads, nicht wiederholbare Lesevorgänge und virtuelle Lesevorgänge (Phantom Reads).

    HinweisWelche zwei Arten von Transaktionen gibt es in Java Spring?: Verwenden Sie die Datenbank-Standardebene. Wenn es sich bei der Datenbank um MySQL handelt, ist die Standardeinstellung wiederholbares Lesen, Oracle ist lesefestgeschrieben.

    ISOLATION_DEFAULT Datenbank-Standardebene verwenden ISOLATION_READ_UNCOMMITTED Nicht festgeschrieben lesen

    ISOLATION_READ_COMMITTED Festgeschriebener Lesevorgang (kann Dirty-Read-Probleme lösen)

    ISOLATION_REPEATABLE_READ Wiederholbarer Lesevorgang (kann Dirty-Read- und nicht wiederholbare Lesevorgänge lösen)#🎜 🎜# ISOLATION_SERIALIZABLE Serialisierung

    kann gelöst werden: ISOLATION_DEFAULT 使用数据库默认级别

    ISOLATION_READ_UNCOMMITTED 读未提交

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

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

    ISOLATION_SERIALIZABLE 串行化

    可解决:

    Welche zwei Arten von Transaktionen gibt es in Java Spring?

    (2)事务传播行为

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

    Welche zwei Arten von Transaktionen gibt es in Java Spring?

    重点:

    Welche zwei Arten von Transaktionen gibt es in Java Spring?

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

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

    2.3 TransactionStatus

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

    Welche zwei Arten von Transaktionen gibt es in Java Spring?

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

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

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

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

    TransactionStatus

    Welche zwei Arten von Transaktionen gibt es in Java Spring? (2) Verhalten bei der Transaktionsausbreitung Das Verhalten bei der Transaktionsweitergabe bezieht sich darauf, wie die Transaktionssteuerung durchgeführt werden soll, wenn eine Geschäftsmethode von einer anderen Geschäftsmethode aufgerufen wird.

    Was sind die beiden Transaktionen von Java Spring

    Wichtiger Punkt:

    Was sind die beiden Transaktionen von Java Spring

    • schreibgeschützt (schreibgeschützt oder nicht): Es wird empfohlen, es bei der Abfrage von

    • timeout (Timeout-Zeit) auf schreibgeschützt zu setzen ): Der Standardwert ist -1. Es gibt kein Timeout-Limit. Wenn ja, stellen Sie ihn in Sekunden ein.

    • 2.3 TransactionStatus

      Die TransactionStatus-Schnittstelle stellt den spezifischen Ausführungsstatus der Transaktion bereit.

      Was sind die beiden Transaktionen von Java Spring

      Sie können die Beziehung zwischen den dreien einfach verstehen: Der Transaktionsmanager führt die Transaktionsverwaltung durch, indem er die Transaktionsdefinitionsparameter liest und dann eine Reihe von Transaktionsstatus generiert.

      Die Transaktionssteuerung in Spring wird hauptsächlich über diese drei APIs implementiert.

      PlatformTransactionManager ist für die Verwaltung von Transaktionen verantwortlich Verantwortlich für bestimmte Arbeiten

      TransactionDefinition definiert einige relevante Parameter der Transaktion

      TransactionStatus stellt einen Echtzeitstatus dar die laufende Transaktion# 🎜🎜#

      Verstehen Sie die Beziehung zwischen den drei:

      Transaktionsmanager
      führt die Transaktionsverwaltung durch, indem er
      Transaktionsdefinitionsparameter
      liest und dann eine Reihe von #🎜 wird generiert 🎜#事STATUS
      .
      3. XML-basierte deklarative Transaktionssteuerung [Wichtige Punkte]

      Deklarative Verarbeitung von Transaktionen in der Spring-Konfigurationsdatei anstelle der Codeverarbeitung. Die unterste Ebene wird mithilfe von AOP-Ideen implementiert.

      Deklarative Transaktionskontrolle klärt Angelegenheiten:

      Kerngeschäftscode (Zielobjekt) (Wer ist der Einstiegspunkt?)

      # 🎜🎜#Transaktionserweiterungscode (Spring hat einen Transaktionsmanager bereitgestellt)) (Wer wird benachrichtigt?) #🎜🎜##🎜🎜#Aspektkonfiguration (Wie konfiguriere ich Aspekte?) (Aspekt = Pointcut + Benachrichtigung)#🎜🎜## 🎜🎜#3.1 Schnellstart#🎜🎜##🎜🎜# Verwenden Sie deklarative Frühlingstransaktionen, um das Transfergeschäft zu steuern. #🎜🎜##🎜🎜##🎜🎜#Schritte: #🎜🎜##🎜🎜##🎜🎜#1.Einführung des tx-Namespace#🎜🎜##🎜🎜#2.Transaction Manager-Benachrichtigungskonfiguration#🎜🎜 # #🎜🎜#3. Transaktionsmanager-AOP-Konfiguration #🎜🎜##🎜🎜#4. Testen Sie den Transaktionskontrollübertragungs-Geschäftscode #🎜🎜##🎜🎜#(1) Einführung des TX-Namespace #🎜🎜#
      <?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
      ">
      Nach dem Login kopieren
      #🎜 🎜#( 2)Transaktionsmanager-Benachrichtigungskonfiguration#🎜🎜#
        <!--事务管理器对象-->
          <!--<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>
      Nach dem Login kopieren
      #🎜🎜#(3)Transaktionsmanager-AOP-Konfiguration #🎜🎜##🎜🎜#Wenn Sie Spring zum deklarativen Verwalten von Transaktionen verwenden, verwenden Sie die aop:advisor aop-Konfiguration! #🎜🎜#
      //aop配置:配置切面   
      <aop:config>  
              <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.lagou.servlet.impl.AccountServiceImpl.*(..))"/>
          </aop:config>-->
      Nach dem Login kopieren
      #🎜🎜##🎜🎜# Detaillierte Konfiguration der Transaktionsparameter: #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#
      • 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);
       }
      }
      Nach dem Login kopieren

      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
      Nach dem Login kopieren

      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;
          }
      }
      Nach dem Login kopieren

      数据源配置类:

      @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;
          }
      }
      Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonWelche zwei Arten von Transaktionen gibt es in Java Spring?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

    Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

    Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

    Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

    Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

    Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

    Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

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

    Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

    Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

    Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

    In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

    Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

    Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

    See all articles