Implementieren Sie im Spring Boot Transaction Management den Self-Interface PlatformTransactionManager.
public interface platformTransactionManager {org.springframework.transaction.transactionStatus getTransaction (org.springframework.transaction.transactionDefinition TransactionDefinition) löscht org.springFramework.transaction.transactionException aus; void Commit (org.springframework.transaction.transactionStatus transactionStatus) löst org.springframework.transaction.transactionException aus; void rollback (org.springframework.transaction.transactionStatus transactionStatus) löst org.springframework.transaction.transactionException aus;}Wenn wir Spring-Boot-Starter-JDBC-Abhängigkeiten verwenden, injiziert das Framework standardmäßig DataSourcetransactionManager automatisch. Daher benötigen wir keine zusätzliche Konfiguration, um die @Transactional -Annotation für die Verwendung von Transaktionen zu verwenden.
JDBC Transaction Manager
Im Dienst unterstützt die von @Transactional kommentierte Methode Transaktionen. Wenn sich die Annotation in einer Klasse befindet, unterstützen alle Methoden der gesamten Klasse standardmäßig Transaktionen.
Multi-Transaktionsmanager-Situation
1: Sie können die Transaktionsmanagement -Configurer -Schnittstelle implementieren, und der Rückgabewert der Methode im Inneren ist der Standard -Transaktionsmanager.
2: Sie können den Wert auf die spezifische Ausführungsmethode festlegen
Wenn im Spring Container mehrere PlattformTransactionManager -Instanzen vorhanden sind und die SchnittstellentransaktionsmanagementConFiger nicht implementiert ist, um den Standardwert anzugeben, müssen wir sie mit dem Wert angeben. Wenn es nicht angegeben ist, wird eine Ausnahme ausgelöst.
//@EnableTransactionManagement // Annotation-Transaktionsmanagement einschalten, das gleichbedeutend mit <tx: Annotationsbetrieben entspricht />@SpringbootApplicationPublic Class ProfileDemoApplication implementiert TransactionManagementConFigurer {@Resource (name = "txmanager2") private platformTransactionManager TXMANAGER2AGER2AGE; // Erstellen von Transaction Manager 1 Das DataSource-Framework wird automatisch in den Frühlingscontainer injiziert. @Bean (name = "txManager1") public platformTransactionManager TxManager (DataSource -DataSource) {Neue DataSourcetransactionManager (DataSource) zurückgeben; } // TransactionManager 2 @Bean (name = "txManager2") public platformTransactionManager txManager2 (EntityManagerFactory Factory) {neu jpatransactionManager (factory) zurückgeben; } // Implementieren Sie die Interface TransactionManagementConFigurer -Methode, deren Rückgabewert den standardmäßigen Transaktionsmanager repräsentiert, wenn Sie mehrere Transaktionsmanager @Override publicTransactionManager AnnotationDrivransactionManager () {return txmanager2; } public static void main (String [] args) {SpringApplication.run (ProfiledemoApplication.Class, Args); }}Spezifische Implementierung
@ComponentPublic Class DevSendMessage implementiert sendMessage {// Value verwenden, um anzugeben, welcher Transaktionsmanager @Transactional (value = "txManager1") @Override public void send () {System.out.println (">>>>>>>>>>>> Dev Send () <) <) <) <) <) <) <) <) <) <) <) <). send2 (); } @Transactional public void send2 () {System.out.println (">>>>>>>>>>>> Dev SEND2 () <<<<<<<<<<); }}Isolationsniveau
public enum isolation {default (transactionDefinition.isolation_default), read_uncommitt (transactionDefinition.isolation_read_uncommitt), read_commidt (transactionDefinition.isolation_read_commidt), repelable_read (transactionDefinition.isolation_repeatable_repeatable_repeatable_Repeatable_repeatable_Repectable_Read_Read_Read_Read_Read_Read_Read_Read),, Serialisierbar (transactionDefinition.isolation_serializable); privater endgültiger intwert; Isolierung (int value) {this.Value = value; } public int value () {return this.value; }} Methode angeben: Setzen Sie beispielsweise die Isolationseigenschaft, beispielsweise:
@Transactional (isolation = isolation.default)
Kommunikationsverhalten
Das sogenannte Transaktionsausbreitungsverhalten bezieht sich darauf, dass es mehrere Optionen gibt, die das Ausführungsverhalten einer Transaktionsmethode angeben können, wenn bereits vor Beginn der aktuellen Transaktion ein Transaktionskontext vorhanden ist.
Wir können sehen, dass die org.springFramework.transaction.annotation.Propagation Enumeration -Klasse 6 Enum -Werte definiert, die das Ausbreitungsverhalten darstellen:
public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS), MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY), REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW), Not_Supported (TransactionDefinition.Propagation_Not_Supported), Never (TransactionDefinition.Propagation_Never), verschachtelt (transactionDefinition.propagation_nested); privater endgültiger intwert; Ausbreitung (int value) {this.Value = value; } public int value () {return this.value; }}Erforderlich: Wenn derzeit eine Transaktion vorhanden ist, verbinden Sie die Transaktion. Wenn derzeit keine Transaktion vorliegt, erstellen Sie eine neue Transaktion. Standardwert.
Unterstützen: Wenn derzeit eine Transaktion vorhanden ist, verbinden Sie die Transaktion. Wenn derzeit keine Transaktion vorliegt, wird weiterhin nicht transaktional ausgeführt.
Obligatorisch: Wenn derzeit eine Transaktion vorhanden ist, verbinden Sie sich der Transaktion. Wenn derzeit keine Transaktion vorliegt, wird eine Ausnahme ausgelöst. (Gezwungen, es in die Transaktion zu stecken)
Required_new: Erstellt eine neue Transaktion, und wenn die Transaktion derzeit vorhanden ist, wird die aktuelle Transaktion ausgesetzt. (Druckenprotokolle werden häufig verwendet. Auch wenn der vorherige Rollback zurückgerollt ist, wird die Transaktion ausgeführt und die Fehlermeldung wird aufgezeichnet.)
Not_Supported: Läuft nicht übertransaktional. Wenn derzeit eine Transaktion besteht, wird die aktuelle Transaktion ausgesetzt.
Niemals: Läuft auf nicht transaktionale Weise eine Ausnahme, wenn derzeit eine Transaktion besteht.
Verschachtelt: Wenn derzeit eine Transaktion besteht, wird eine Transaktion erstellt, um als verschachtelte Transaktion der aktuellen Transaktion auszuführen. Wenn derzeit keine Transaktion vorliegt, ist der Wert gleichwertig der erforderlichen.
Methode angeben: Setzen Sie beispielsweise die Propagationseigenschaft, beispielsweise:
@Transactional (Propagation = Propagation.Required)
Transaktion nicht Rollback -Situation
Rollen Sie nur zurück, wenn eine ungekordene RunTimeException auftritt
Die von Catch ausgelöste Ausnahme ist erfolgreich, wenn beide Einfügungen
@Override @transactional public void InsertandInsert (Staff) {StaffDAO.insert (Staff); Versuchen Sie {int i = 1/0; } catch (Ausnahme e) {e.printstacktrace (); } staffdao.insert (Staff); }Hinzufügen zur Catch -Anweisung der Service Layer -Methode: transactionaspectSupport.currentTransactionStatus (). SetRollbackonly (); Anweisung, manueller Rollback fügt keine Daten ein
@Override @Transactional public void InsertandInsert (Staff) löst eine Ausnahme aus {try {staffdao.insert (Staff); int i = 1/0; Staffdao.insert (Staff); } catch (Ausnahme e) {transactionaspectSupport.currentTransactionStatus (). setRollbackonly (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.