11 Stimmen

Spring-Transaktionen mit Supports Propagation

Ich würde gerne den Nutzen einer Spring-Transaktion mit Propagation Supports verstehen. Die Java-Dokumente erwähnen, dass wenn die Methode, die hat @Transactional(propagation = Propagation.SUPPORTS) aus einer Transaktion heraus aufgerufen wird, wird die Transaktion unterstützt, aber wenn keine Transaktion existiert, wird die Methode nicht-transaktional ausgeführt.

Ist dies nicht bereits das Verhalten von Frühjahrstransaktionen, unabhängig von der Propagation.SUPPORTS ?

public class ServiceBean {

    @Transactional(propagation = Propagation.SUPPORTS)
    public void methodWithSupportsTx() {
        //perform some database operations
    }
}

public class OtherServiceBean {

    @Transactional(propagation = Propagation.REQUIRED)
    public void methodWithRequiredTx() {
        //perform some database operations
        serviceBean.methodWithSupportsTx();
    }
}

In dem obigen Codebeispiel ist es egal, ob methodWithSupportsTx() hat @Transactional(propagation = Propagation.SUPPORTS) Annotation würde sie in einer Transaktion ausgeführt werden, je nachdem, ob methodWithRequiredTx() hat @Transactional Bemerkung, richtig?

Wozu braucht man also eine Ausbreitungsebene SUPPORTS?

5voto

axtavt Punkte 233070

En javadoc :

Hinweis: Für Transaktionsmanager mit Transaktionssynchronisation unterscheidet sich PROPAGATION_SUPPORTS geringfügig von keiner Transaktion, da es einen Transaktionsbereich definiert, für den die Synchronisation gilt. Dies hat zur Folge, dass dieselben Ressourcen (JDBC-Verbindung, Hibernate-Sitzung usw.) für den gesamten angegebenen Bereich gemeinsam genutzt werden. Beachten Sie, dass dies von der tatsächlichen Synchronisationskonfiguration des Transaktionsmanagers abhängt.

Das bedeutet, dass zum Beispiel mehrere Aufrufe von Hibernate's SessionFactory.getCurrentSession() innerhalb methodWithSupportsTx() würde die gleiche Sitzung zurückgeben.

-2voto

Kevin Bowersox Punkte 90706

Bei einer erforderlichen Transaktion wird eine neue Transaktion erstellt, wenn keine vorhanden ist. Daher würde eine neue Transaktion erstellt werden, wenn Sie serviceBean.methodWithSupportsTx() aufrufen. Wenn Ihre Methode wirklich transaktional ist, werden Sie einen Fehler von Spring sehen, wenn keine Transaktion vorhanden ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X