Heim  >  Artikel  >  Datenbank  >  Wie man Spring-Transaktionen und die Verwendung deklarativer Transaktionen versteht

Wie man Spring-Transaktionen und die Verwendung deklarativer Transaktionen versteht

坏嘻嘻
坏嘻嘻Original
2018-09-15 11:27:081911Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Verständnis von Spring-Transaktionen und der Verwendung deklarativer Transaktionen, einschließlich der Isolationsstufe von Dingen in der Datenbank. Ich hoffe, dass dies der Fall ist hilfreich sein.

Die Verwendung von Spring-Transaktionen und deklarativen Transaktionen

(Studenten, beginnen Sie mit der Überprüfung des Datenbankwissens, das den Lehrern von der Universität vermittelt wird!!)

Transaktion: Eine Programmausführungseinheit (Einheit), die auf verschiedene Datenelemente in der Datenbank zugreift und diese möglicherweise aktualisiert.

Transaktionen haben vier Attribute: (ACID)

Atomizität: Eine Transaktion ist eine unteilbare Arbeitseinheit, und alle in der Transaktion enthaltenen Vorgänge werden entweder ausgeführt oder nicht ausgeführt.

Konsistenz; eine Transaktion muss die Datenbank von einem Konsistenzzustand in einen anderen Konsistenzzustand ändern. Konsistenz und Atomizität hängen eng zusammen.

Isolation: Die Ausführung einer Transaktion kann nicht durch andere Dinge beeinträchtigt werden. Das heißt, die in einer Transaktion verwendeten internen Vorgänge und Daten sind von anderen gleichzeitigen Transaktionen isoliert und gleichzeitig ausgeführte Transaktionen können sich nicht gegenseitig stören.

Persistenz: Haltbarkeit, auch Permanenz genannt, bedeutet, dass die Änderungen an den Daten in der Datenbank dauerhaft sein sollten, sobald eine Transaktion übermittelt wird.

Transaktionszweck: Zur Wahrung der Datenkonsistenz und -integrität.

Konsistenz: Der Datenstatus einer Geschäftskette ist konsistent und kann nicht teilweise geändert und teilweise unverändert bleiben.

Integrität: Die Daten einer Geschäftskette sind vollständig, entweder abgeschlossen und gleichzeitig fehlgeschlagen, teilweises Schreiben kann nicht erfolgreich sein und teilweises Schreiben schlägt fehl.

Ein einfaches Verständnis der Konsistenz und Integrität der Angelegenheiten ist, dass wir entweder zusammen leben oder zusammen sterben, wir können nicht alleine leben. (Wie elende Liebe...^ _ ^)

Transaktionsisolationsstufe in der Datenbank

Bevor wir die Transaktionsisolationsstufe verstehen, wollen wir zunächst die möglichen Ursachen verstehen, die häufig in den Daten auftreten Mehrere Situationen bei dem die Geschäftslogik versagt.

Dirty Read

Wenn eine Transaktion auf Daten zugreift und die Daten geändert und zu diesem Zeitpunkt noch nicht an die Datenbank übermittelt hat, greift eine andere Transaktion ebenfalls auf die Daten zu und verwendet diese Daten .

Zum Beispiel: Zhang Sans Bankkonto hat jetzt 1000, und jetzt hat Zhang San 200 eingezahlt. Wenn Zhang San dann auf „Senden“ klickt, ist seine Frau (der fleißige Zhang San spart Taschengeld für seine Frau) da Einkaufen im Einkaufszentrum und Geld ausgeben 500. Zhang San überprüfte den Kontostand und stellte fest, dass er nur 500 betrug (Zhang San war verwirrt ...). Dann stritten sich die beiden über 200. Das oben Genannte hat zu einem Familienkrieg geführt, der durch übermäßiges Lesen verursacht wurde.

Nicht wiederholbares Lesen

Nicht wiederholbares Lesen: Lesen Sie dieselben Daten mehrmals innerhalb einer Transaktion. Bevor diese Transaktion beendet wurde, hat auch eine andere Transaktion auf die Daten zugegriffen. Zwischen den beiden Lesevorgängen von Daten durch die erste Transaktion können die von der ersten Transaktion gelesenen Daten aufgrund von Änderungen durch die zweite Transaktion unterschiedlich sein. Auf diese Weise sind die innerhalb einer Transaktion zweimal gelesenen Daten unterschiedlich. (Das heißt, dieselben Daten können nicht gelesen werden)

Phantomlesung

Eine Transaktion ändert die Daten in einer Tabelle, und diese Änderung betrifft alle Datenzeilen in der Tabelle gleichzeitig Die zweite Transaktion fügt eine neue Datenzeile in die Tabelle ein. Es kommt vor, dass der Benutzer, der die erste Transaktion durchführt, feststellt, dass die Tabelle noch unveränderte Datenzeilen enthält. Es war wie eine Halluzination.

Die fünf Isolationsstufen von Spring

ISOLATION_DEFAULT

stellt die Standardisolationsstufe der zugrunde liegenden Datenbank dar. Für die meisten Datenbanken ist der übliche Wert: ISOLATION _READ _COMMITTED

ISOLATION _READ _UNCOMMITTED

gibt an, dass eine Transaktion Daten lesen kann, die von einer anderen Transaktion geändert, aber noch nicht festgeschrieben wurden, und Dirty Reads und nicht wiederholbare Lesevorgänge nicht verhindern kann.

ISOLATION _READ _COMMITTED

Eine Transaktion kann nur Daten lesen, die von einer anderen Transaktion übermittelt wurden, was Dirty Reads, aber nicht wiederholbare Lesevorgänge verhindern kann. (In den meisten Fällen empfohlener Wert)

ISOLATION _REPEATABLE _READ

Eine Transaktion kann eine Abfrage während des gesamten Prozesses mehrmals ausführen, und die zurückgegebenen Datensätze sind jedes Mal dieselben. Selbst wenn zwischen mehreren Abfragen neue Daten vorhanden sind, um die Abfrage zu erfüllen, werden diese neuen Datensätze ignoriert. Kann fehlerhafte Lesevorgänge und nicht wiederholbare Lesevorgänge verhindern.

ISOLATION _SERIALIZBLE

Alle Transaktionen werden einzeln nacheinander ausgeführt, sodass keine Möglichkeit einer Interferenz zwischen Transaktionen besteht. Es kann Dirty Reads, nicht wiederholbare Reads und Phantom Reads verhindern.

Die Weitergabe von Transaktionen (Frühling stellt sieben bereit)

bezieht sich auf die Beziehung zwischen Transaktionen. Wenn eine Transaktion beispielsweise eine andere Transaktion enthält, wird die Weitergabe verwendet, um die Ausführung der anderen zu bestimmen .

TransationDefinition.PROPAGETION.REQUIRED

Wenn derzeit eine Transaktion vorhanden ist, schließen Sie sich der Transaktion an. Wenn derzeit keine Transaktion vorhanden ist, erstellen Sie eine neue Transaktion.
Standardtransaktion im Frühjahr. Geeignet für die meisten Situationen.

TransationDefinition.PROPAGETION.REQUIRED_NEW

Eine neue Transaktion erstellen. Wenn derzeit eine Transaktion vorhanden ist, unterbrechen Sie die aktuelle Transaktion.
Es bedeutet, eine neue Transaktion zu erstellen, die nichts mit der ursprünglichen Transaktion zu tun hat.

TransationDefinition.PROPAGETION.SUPPORTS

Wenn derzeit eine Transaktion vorhanden ist, schließen Sie sich der Transaktion an. Wenn derzeit keine Transaktion vorhanden ist, führen Sie die Ausführung auf nicht-transaktionale Weise fort.
Diese Methode ist sehr locker. Wenn Sie sie nicht haben, haben Sie sie. Es ist eine etwas gleichgültige Einstellung.

TransationDefinition.PROPAGATION.NOT_SUPPORTED

Nicht transaktional ausführen Wenn derzeit eine Transaktion vorhanden ist, wird die aktuelle Transaktion ausgesetzt.
Diese Methode ist sehr schwierig. Wenn Sie sie nicht haben, werden Sie sie nicht unterstützen.

TransationDefinition.PROPAGETION_NEVER

Nicht-transaktional ausführen und eine Ausnahme auslösen, wenn derzeit eine Transaktion vorhanden ist.
Diese Methode ist energischer. Wenn es kein Problem gibt, wird ein Fehler allen gemeldet.

TransationDefinition.PROPAGETION_MANDATORY

Wenn derzeit eine Transaktion vorhanden ist, treten Sie der Transaktion bei. Wenn derzeit keine Transaktion vorhanden ist, lösen Sie eine Ausnahme aus.
Diese Methode kann als die schwierigste bezeichnet werden. Wenn es keine Transaktion gibt, wird ein Fehler direkt gemeldet. Sie sagt der ganzen Welt: Ich muss eine Transaktion haben.

TransationDefinition.PROPAGETION_NESTED

Wenn derzeit eine Transaktion vorhanden ist, erstellen Sie eine Transaktion, die als verschachtelte Transaktion der aktuellen Transaktion ausgeführt werden soll. Wenn derzeit keine Transaktion vorhanden ist, entspricht dieser Wert
TransationDefinition .PROPAGETION_REQUIRED

Deklarative Transaktion

Verwenden

Schauen Sie sich jetzt Springboot an, wenn Sie eine deklarative Transaktion verwenden:

@Transactional
public void save(Object ob){

}

Fügen Sie einfach @ zur Methode Transaktionsannotation hinzu Methoden können durch Transaktionen verwaltet werden.

Quellcode

Sehen Sie sich den Quellcode der Annotation Transactional an:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {

@AliasFor("transactionManager")
String value() default "";


@AliasFor("value")
String transactionManager() default "";

Propagation propagation() default Propagation.REQUIRED;

Isolation isolation() default Isolation.DEFAULT;

int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;


boolean readOnly() default false;

Class<? extends Throwable>[] rollbackFor() default {};


String[] rollbackForClassName() default {};

Class<? extends Throwable>[] noRollbackFor() default {};


String[] noRollbackForClassName() default {};

}

Standardwert

readOnly: Ob es nur schreibgeschützt ist. Sowohl Lesen als auch Schreiben sind standardmäßig möglich

Timeout: Transaktions-Timeout, es gibt standardmäßig kein Timeout

Isolation: Die Standardisolationsstufe der Transaktion: TransactionDefinition.ISOLATION_DEFAULT (siehe Isolationsstufe oben)

Propagierung: Standardwert für das Transaktionspropagierungsattribut: TransactionDefinition.PROPAGATION_REQUIRED

Hinweise

  • Anmerkungen sollten nur auf öffentliche Methoden angewendet werden

  • Selbstaufrufendes Problem: Wenn in der Klasse keine annotierte Methode vorhanden ist und eine annotierte Methode aufgerufen wird, generiert die annotierte Methode keine Transaktion, wenn eine nicht annotierte Methode extern aufgerufen wird

Das obige ist der detaillierte Inhalt vonWie man Spring-Transaktionen und die Verwendung deklarativer Transaktionen versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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