Inhaltsverzeichnis
1. Beispiele für Nutzungsszenarien
2. Geprüfte Ausnahmen und ungeprüfte Ausnahmen
3. Verwendungsbeispiele von @Transactional
4. Konzepte, die Sie über @Transactional in Spring verstehen müssen
Heim Java javaLernprogramm Detaillierte Einführung in @Transactional-Transaktions-Rollback-Beispiele und Quellcode im Frühjahr (Bild)

Detaillierte Einführung in @Transactional-Transaktions-Rollback-Beispiele und Quellcode im Frühjahr (Bild)

Mar 30, 2017 am 11:00 AM

1. Beispiele für Nutzungsszenarien

Bevor wir verstehen, wie @Transactional verwendet wird, müssen wir zunächst wissen, wofür @Transactional verwendet wird. Hier ein Beispiel: Es gibt beispielsweise viele Mitglieder in einer Abteilung, die in der Abteilungstabelle bzw. der Mitgliedertabelle gespeichert sind. Wenn Sie eine Abteilung löschen, gehen wir davon aus, dass wir standardmäßig die entsprechenden Mitglieder löschen. Diese Situation kann jedoch während der Ausführung auftreten. Wir löschen zuerst die Abteilung und dann die Mitglieder. Die Abteilung wird jedoch erfolgreich gelöscht, beim Löschen der Mitglieder tritt jedoch eine Ausnahme auf. Zu diesem Zeitpunkt hoffen wir, dass auch die zuvor gelöschten Abteilungen wiederhergestellt werden, wenn das Löschen des Mitglieds fehlschlägt. In diesem Szenario können Sie das Transaktions-Rollback @Transactional verwenden.

2. Geprüfte Ausnahmen und ungeprüfte Ausnahmen

Der Grund, warum sich jeder über die Konzepte der geprüften und ungeprüften Ausnahmen im Klaren ist, liegt darin, dass:

Spring verwendet deklarative Transaktionen Bei der Verarbeitung werden standardmäßig alle Datenbankvorgänge zurückgesetzt, wenn eine ungeprüfte Ausnahme in der mit Anmerkungen versehenen -Datenbankoperation auftritt. Wenn es sich bei der aufgetretenen Ausnahme um eine überprüfte Ausnahme handelt, wird die Datenbankoperation weiterhin standardmäßig übermittelt.

geprüfte Ausnahme:

bedeutet ungültig und kann im Programm nicht vorhergesagt werden. Beispiel: Ungültige Benutzereingabe, Datei existiert nicht, Netzwerk- oder Datenbankverbindungsfehler. Dies sind alles externe Gründe und können nicht innerhalb des Programms gesteuert werden.

muss im Code explizit behandelt werden. Versuchen Sie beispielsweise die Blockverarbeitung durch Try-Catch oder fügen Sie der Methode eine Throws-Beschreibung hinzu, um die Ausnahme in die obere Ebene des Aufrufstapels auszulösen.

Erbt von java.lang.Exception (außer java.lang.RuntimeException).

ungeprüfte Ausnahme:

zeigt einen Fehler an, einen logischen Fehler im Programm. Ist eine Unterklasse von RuntimeException, z. B. IllegalArgumentException, NullPointerException und IllegalStateException.

Es besteht keine Notwendigkeit, ungeprüfte Ausnahmen im Code für die Behandlung explizit abzufangen.

Erbt von java.lang.RuntimeException (und java.lang.RuntimeException erbt von java.lang.Exception).

Sehen Sie sich das Ausnahmestrukturdiagramm unten an, das möglicherweise einen tieferen Sinn für Hierarchie hat:

Detaillierte Einführung in @Transactional-Transaktions-Rollback-Beispiele und Quellcode im Frühjahr (Bild)

3. Verwendungsbeispiele von @Transactional

Dieses Beispiel verwendet Es ist Eclipse+Maven wird nur als Glas verwaltet. Selbst diejenigen, die Maven nicht verstehen, können es verstehen.

3.1. Springs Konfigurationsdatei

muss zunächst den tx-Namespace wie folgt konfigurieren:

Detaillierte Einführung in @Transactional-Transaktions-Rollback-Beispiele und Quellcode im Frühjahr (Bild)

Um das auf @Transactional basierende Transaktionsmanagement nutzen zu können, muss in Spring die folgende Konfiguration vorgenommen werden:

<bean id="appTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven proxy-target-class="false" transaction-manager="appTransactionManager" />
Nach dem Login kopieren

Die gesamte Spring-Konfigurationsdatei des Bloggers:




       
     
        
            
               classpath:properties/*.properties
                
            
        
    

    
    
        
        
       
        
            ${jdbc_driverClassName}
        
        
            ${jdbc_url}
        
        
            ${jdbc_username}
        
        
            ${jdbc_password}
        
    

    <bean id="appTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven proxy-target-class="false" transaction-manager="appTransactionManager" />

    
    
        
    

    
    
        
          
        
        
    

    
    

Nach dem Login kopieren

3.2. Verwenden Sie @Transactional, fügen Sie die Benutzer-Implementierungsklassenmethode in hinzu und fügen Sie eine Anmerkung hinzu

@Transactional(propagation=Propagation.REQUIRED)
public void addUser(User user) {
    userDao.addUser(user);
    String string  = null;
    if(string.equals("")) {
        int i = 0;
    }
}
Nach dem Login kopieren

Ich habe in der obigen Methode absichtlich eine Nullzeigerausnahme verursacht führt zu einem Rollback.

3.3. Führen Sie den Unit-Test aus

@Test  
public void addUserTest(){  
    User user = new User();
    user.setUserName("luoguohui1");
    user.setUserPassword("luoguohui1");
    userService.addUser(user);
}
Nach dem Login kopieren

und stellen Sie fest, dass er nicht eingefügt werden kann Wenn @Transactional entfernt wird, lautet der Code wie folgt, obwohl eine Ausnahme auftritt, die entsprechenden Daten jedoch weiterhin zur Datenbank hinzugefügt werden:

Detaillierte Einführung in @Transactional-Transaktions-Rollback-Beispiele und Quellcode im Frühjahr (Bild)

3.4, Quellcode Herunterladen

Das Projekt für diesen Artikel ist in mybatis. Basierend auf den „Erste Schritte“ (einschließlich Beispiel-Tutorials und Quellcode) enthält dieser Artikel den detaillierten Prozess der Datenbankskripte und Projektkonstruktion.

4. Konzepte, die Sie über @Transactional in Spring verstehen müssen

@Transactional in Spring basiert auf dem dynamischen Proxy-Mechanismus, der einen transparenten Transaktionsverwaltungsmechanismus bietet, der bequem und schnell durchzuführen ist Lösen Sie während der Entwicklung aufgetretene Probleme.

Allgemeine Verwendung besteht darin, Methoden, Schnittstellen oder Klassen durch den folgenden Code zu kommentieren:

@Transactional(propagation=Propagation.NOT_SUPPORTED)
Nach dem Login kopieren

Die Weitergabe unterstützt 7 verschiedene Weitergabemechanismen:

ERFORDERLICH : Wenn eine Transaktion vorhanden ist, wird die aktuelle Transaktion unterstützt. Wenn keine Transaktion vorliegt, starten Sie eine neue Transaktion.

UNTERSTÜTZT: Wenn eine Transaktion vorhanden ist, unterstützen Sie die aktuelle Transaktion. Wenn keine Transaktion vorliegt, erfolgt die Ausführung ohne Transaktion. Für Transaktionsmanager mit Transaktionssynchronisierung unterscheidet sich PROPAGATION_SUPPORTS jedoch geringfügig davon, keine Transaktionen zu verwenden.

NICHT_UNTERSTÜTZT: Immer nicht transaktionsorientiert ausführen und alle vorhandenen Transaktionen aussetzen.

ERFORDERLICHNEU: Starten Sie immer eine neue Transaktion. Wenn bereits eine Transaktion vorhanden ist, wird die bestehende Transaktion ausgesetzt.

PFLICHT: Wenn bereits eine Transaktion vorhanden ist, wird die aktuelle Transaktion unterstützt. Wenn keine aktive Transaktion vorhanden ist, löst eine Ausnahme aus.

NIEMALS: Immer nicht-transaktional ausführen. Wenn eine aktive Transaktion vorhanden ist, wird eine Ausnahme ausgelöst.

GENEST: Wenn eine aktive Transaktion vorhanden ist, wird eine verschachtelte Transaktion ausgeführt. Wenn keine aktive Transaktion vorhanden ist, führen Sie sie entsprechend der ERFORDERLICHENEigenschaft aus.

Die folgenden Dinge müssen beachtet werden. Sie müssen sie lesen, sonst werden Sie auf verschiedene Fallstricke stoßen. Sagen Sie nicht, dass der Blogger Sie nicht daran erinnert hat :

Hier sind einige Dinge, auf die Sie achten müssen. Andernfalls sagen Sie nicht, dass der Blogger Sie nicht daran erinnert hat:

Im Folgenden sind einige Dinge aufgeführt, auf die Sie achten müssen. Sie müssen sie lesen, andernfalls sagen Sie nicht, dass der Blogger Sie nicht daran erinnert hat, wenn Sie auf verschiedene Fallstricke stoßen :

    Fügen Sie die Annotation @Transactional hinzu, wenn eine Transaktionsverwaltung erforderlich ist. Die Annotation @Transactional kann auf Schnittstellendefinitionen und Schnittstellenmethoden, Klassendefinitionen und öffentliche Methoden von Klassen angewendet werden.
  • @Transactional Annotation kann nur auf Methoden mit öffentlicher Sichtbarkeit angewendet werden. Wenn Sie die Annotation @Transactional für eine geschützte, private oder paketsichtbare Methode verwenden, wird kein Fehler gemeldet, aber die annotierte Methode zeigt die konfigurierten Transaktionseinstellungen nicht an.
  • Beachten Sie, dass das bloße Erscheinen der @Transactional-Annotation nicht ausreicht, um Transaktions-
  • Verhalten

    zu ermöglichen, es handelt sich lediglich um eine Art Metadaten. In der Konfigurationsdatei müssen Konfigurationselemente verwendet werden, um das Transaktionsverhalten tatsächlich zu ermöglichen.

  • Verwenden Sie den Attributwert „proxy-target-class“ des Elements, um zu steuern, ob ein schnittstellenbasierter oder klassenbasierter Proxy erstellt wird. Wenn der Attributwert „proxy-target-class“ auf „true“ gesetzt ist, funktioniert das klassenbasierte Proxying (dafür muss sich die CGLIB-Bibliothek cglib.jar im CLASSPATH befinden). Wenn der Attributwert „proxy-target-class“ auf „false“ gesetzt ist oder dieses Attribut weggelassen wird, wird der auf der Standard-JDK-Schnittstelle basierende Proxy verwendet.
  • Das Spring-Team empfiehlt die Verwendung der @Transactional-Annotation für bestimmte Klassen (oder Klassenmethoden) und nicht für jede Schnittstelle, die die Klasse implementieren möchte. Die Verwendung der @Transactional-Annotation auf einer Schnittstelle wird nur dann wirksam, wenn Sie einen schnittstellenbasierten Proxy einrichten. Da Anmerkungen nicht vererbbar sind, bedeutet dies, dass bei Verwendung eines klassenbasierten Proxys die Transaktionseinstellungen vom klassenbasierten Proxy nicht erkannt werden und das
  • -Objekt

    vom Transaktions-Proxy nicht erkannt wird . Paket.

  • @Transactional-Transaktion wird geöffnet oder ein schnittstellenbasierter oder klassenbasierter Proxy wird erstellt. Wenn daher eine Methode derselben Klasse eine andere Methode mit einer Transaktion aufruft, funktioniert die Transaktion nicht.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in @Transactional-Transaktions-Rollback-Beispiele und Quellcode im Frühjahr (Bild). 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
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)

Heiße Themen

Java-Tutorial
1666
14
PHP-Tutorial
1273
29
C#-Tutorial
1252
24
Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Jan 08, 2024 am 10:23 AM

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

So implementieren Sie geplante Aufgaben in Java Spring So implementieren Sie geplante Aufgaben in Java Spring May 24, 2023 pm 01:28 PM

Java implementiert geplante Aufgaben In der mit Jdk gelieferten Bibliothek gibt es zwei Möglichkeiten, geplante Aufgaben zu implementieren: eine ist Timer und die andere ist ScheduledThreadPoolExecutor. Wenn Timer+TimerTask einen Timer erstellt, wird ein Thread erstellt, der zum Planen von TimerTask-Aufgaben verwendet werden kann. Der Timer verfügt über vier Konstruktionsmethoden. Sie können den Namen des Timer-Threads angeben und angeben, ob er als Daemon-Thread festgelegt werden soll. Der Standardname ist Timer-Nummer und der Standardname ist kein Daemon-Thread. Es gibt drei Hauptmethoden: cancel(): Aufgabenplanung beenden, alle derzeit geplanten Aufgaben abbrechen, laufende Aufgaben sind davon nicht betroffen. purge(): Aufgaben aus der Aufgabenwarteschlange entfernen

Die Unterschiede und Zusammenhänge zwischen Spring Boot und Spring Cloud Die Unterschiede und Zusammenhänge zwischen Spring Boot und Spring Cloud Jun 22, 2023 pm 06:25 PM

SpringBoot und SpringCloud sind beides Erweiterungen des Spring Framework, die Entwicklern dabei helfen, Microservice-Anwendungen schneller zu erstellen und bereitzustellen. Sie haben jedoch jeweils unterschiedliche Zwecke und Funktionen. SpringBoot ist ein Framework zum schnellen Erstellen von Java-Anwendungen, das es Entwicklern ermöglicht, Spring-basierte Anwendungen schneller zu erstellen und bereitzustellen. Es bietet eine einfache und leicht verständliche Möglichkeit, eigenständige, ausführbare Spring-Anwendungen zu erstellen

So legen Sie die Transaktionsisolationsstufe im Frühjahr fest So legen Sie die Transaktionsisolationsstufe im Frühjahr fest Jan 26, 2024 pm 05:38 PM

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

Lernen Sie Spring Cloud von Grund auf Lernen Sie Spring Cloud von Grund auf Jun 22, 2023 am 08:11 AM

Als Java-Entwickler ist das Erlernen und Verwenden des Spring-Frameworks eine wesentliche Fähigkeit. Mit der Popularität von Cloud Computing und Microservices ist das Erlernen und Verwenden von Spring Cloud zu einer weiteren Fähigkeit geworden, die beherrscht werden muss. SpringCloud ist ein auf SpringBoot basierendes Entwicklungstoolset zum schnellen Aufbau verteilter Systeme. Es bietet Entwicklern eine Reihe von Komponenten, darunter Dienstregistrierung und -erkennung, Konfigurationscenter, Lastausgleich und Leistungsschalter usw., sodass Entwickler Mikrofunktionen erstellen können

Die 7 am häufigsten verwendeten Anmerkungen in Spring, der mächtigsten Organisation der Geschichte! Die 7 am häufigsten verwendeten Anmerkungen in Spring, der mächtigsten Organisation der Geschichte! Jul 26, 2023 pm 04:38 PM

Mit der Aktualisierung und Iteration der Technologie begann Java5.0, Anmerkungen zu unterstützen. Als führendes Framework in Java hat Spring seit der Aktualisierung auf Version 2.5 langsam damit begonnen, die XML-Konfiguration aufzugeben, und es werden mehr Annotationen zur Steuerung des Spring-Frameworks verwendet.

See all articles