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.
(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...^ _ ^)
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.
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: 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)
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.
stellt die Standardisolationsstufe der zugrunde liegenden Datenbank dar. Für die meisten Datenbanken ist der übliche Wert: ISOLATION _READ _COMMITTED
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.
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)
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.
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.
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 .
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.
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.
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.
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.
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.
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.
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
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.
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 {}; }
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
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!