Relevante Einführung in das Spring-Transaktionsmanagement (mit Code)
Dieser Artikel bietet Ihnen eine relevante Einführung in das Spring-Transaktionsmanagement (mit Code). Freunde in Not können darauf verweisen.
Transaktion
Eine logische Reihe von Operationen, von denen jeder Teil entweder erfolgreich ist oder fehlschlägt
Eigenschaften der Transaktion
Konsistenz: Die Datenintegrität bleibt vor und nach der Transaktion konsistent
Atomizität: Transaktionen können nicht aufgeteilt werden, entweder sind alle erfolgreich oder alle scheitern
-
Isolation: Die Ausführung Anzahl der Transaktionen wird von anderen Transaktionen nicht beeinflusst und ist voneinander isoliert
Persistenz: Sobald die Transaktion abgeschlossen ist, wird sie in der Datenbank gespeichert und ist von den Systemauswirkungen nicht betroffen Absturz
Probleme, die entstehen, wenn die Merkmale nicht erfüllt sind
Probleme, die durch Isolation verursacht werden:
Lesen Sie das Problem
-
Dirty Read: Eine Transaktion liest Daten, die nicht von anderen Transaktionen festgeschrieben wurden.
Nicht wiederholbares Lesen: Eine Transaktion liest von anderen Transaktionen übermittelte Aktualisierungen Daten , was zu inkonsistenten Abfrageergebnissen führt
-
Phantomlesung: Eine Transaktion liest Einfügedaten aus einer anderen Transaktion , was zu inkonsistenten Abfrageergebnissen führt
Schreibproblem
Vorgang verloren
Leseproblem lösen
Transaktionsisolationsstufe festlegen
int ISOLATION_DEFAULT = -1; int ISOLATION_READ_UNCOMMITTED = 1; int ISOLATION_READ_COMMITTED = 2; int ISOLATION_REPEATABLE_READ = 4; int ISOLATION_SERIALIZABLE = 8;
ISOLATION_DEFAULT: Stellt den Spring-Standardwert dar und gibt an, dass die Standardisolationsstufe der zugrunde liegenden Datenbank verwendet wird. Beispielsweise verwendet MySQL ISOLATION_REPEATABLE_READ und ISOLATION_READ_COMMITTED
ISOLATION_READ_UNCOMMITTED: Nicht festgeschriebener Lesevorgang, kann das Leseproblem nicht lösen
ISOLATION_READ_COMMITTED: Festgeschriebener Lesevorgang, kann gelöst werden das schmutzige Problem Lesen, kann Phantom-Lesevorgänge und nicht wiederholbare Lesevorgänge nicht lösen
ISOLATION_REPEATABLE_READ: Wiederholte Lesevorgänge, kann schmutzige Lesevorgänge und nicht wiederholbare Lesevorgänge lösen
ISOLATION_SERIALIZABLE: Kann alle Leseprobleme lösen, die Effizienz ist nicht hoch
Transaktionsmanagement-API von Spring
PlatformTransactionManager: Plattformtransaktionsmanager
PlatformTransactionManager ist eine Schnittstelle, die wird von der untersten Ebene von Spring Object zum Verwalten von Transaktionen verwendet.
public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) throws TransactionException; }
offizielle Website-Adresse von spring thing
Die gängigsten Implementierungsklassen sind:
DataSourceTransactionManager: unten Schicht verwendet JDBC-Transaktionsverwaltung
HibernateTransactionManager: Die zugrunde liegende Schicht verwendet Hibernate-Transaktionsverwaltung
TransactionDefinition:
Transaktion Definition: Transaktionen können definiert werden Zugehörige Informationen, Transaktionsausbreitungsverhalten, Isolationsstufe, Timeout-Informationen, ob schreibgeschützt
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(); }
TransactionStatus: Transaktionsstatus
Transaktion Status: Datensatzverwaltungstransaktionsprozess Objekte im Transaktionsstatus
Die sieben Transaktionsausbreitungsverhalten im Frühling
Das Transaktionsausbreitungsverhalten wird verwendet, um das Problem gegenseitiger Aufrufe zwischen Unternehmen zu lösen Methoden
Offizielles Website-Portal
Voraussetzung:
Methode A() in Methode B() aufrufen
Verschachtelte Transaktion
PROPAGATION_NESTED: Es gibt eine Transaktion in A und Transaktion A wird normal ausgeführt. Nachdem Transaktion A ausgeführt wurde, legen Sie einen Speicherpunkt fest und führen Sie Vorgang B aus. Wenn B eine Ausnahme auslöst, können Sie zur Sicherheit zur Ausgangsposition oder zum Speicherpunkt zurückkehren
dass sich die Operation in derselben Transaktion befindet
PROPAGATION_REQUIRED: Wenn Methode B Methode A aufruft und Methode A eine Transaktion hat, verwendet Methode B die Transaktion in A. Wenn in A keine Transaktion vorhanden ist, erstellt B eine Transaktion
PROPAGATION_SUPPORTS: B ruft A auf. Wenn in A eine Transaktion vorhanden ist, wird die Transaktion in A verwendet Keine Transaktion in A, B wird die Transaktion nicht verwenden
PROPAGATION_MANDATORY: Wenn A eine Transaktion hat, verwenden Sie die Transaktion in A, und es gibt keine Transaktion in A, werfen Sie eine Ausnahme
Stellen Sie sicher, dass sich die Vorgänge nicht im selben
PROPAGATION_REQUIRES_NEW in der Transaktion befinden: Es gibt eine Transaktion in A, unterbrechen Sie die A-Transaktion und die Die von B eröffnete Transaktion umfasst nur ihre eigenen Vorgänge. Es gibt keine Transaktion in A und die von B erstellte Transaktion enthält nur ihre eigene Operation
PROPAGATION_NOT_SUPPORTED: Es gibt eine Transaktion in A, A ist ausgesetzt und B verwendet die Transaktion nicht
*PROPAGATION_NEVER: Es gibt eine Transaktion in A und B wird ausgelöst. Ausnahme
Spring bietet zwei Transaktionsverwaltungsmethoden
Deklarative Transaktionsverwaltung : Transaktionen deklarativ in der Spring-Konfigurationsdatei verarbeiten Als Ersatz für die codebasierte Transaktionsverarbeitung (häufiger verwendet)
Transaktionsverwaltung programmieren: Codebasierte Transaktionsverarbeitung erfordert das Schreiben von Code im Programm
Deklaratives Transaktionsmanagement
basiert auf 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>
save* stellt eine Methode dar, die mit save beginnt, verwendet PROPATATION_REQUIRED-Transaktionsweitergabe und REPEATABLE_READ-Transaktionsisolation
基于注解
<!--配置事务管理器--> <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" > <property name="dataSource" ref="dataSource" ></property> </bean> <!--开启注解事务--> <tx:annotation-driven transaction-manager="trancationManager" />
使用tx:annotation-driven 开启事务的注解后,在使用的时候只需要在类或者方法上加入@Transactional就可以开启注解
基于xml的事务和基于注解的事务对比
文件配置对比
事务基于注解简化了xml中的使用比较
使用注解必须在类或者方法上添加@Trasactional,如果有多个业务类,则需要在每个业务类上添加
使用xml只需要在配置文件中配置包名即可
Das obige ist der detaillierte Inhalt vonRelevante Einführung in das Spring-Transaktionsmanagement (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

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

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

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

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

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.

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.

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
