Ich habe vor kurzem begonnen, mit RxJava zu experimentieren und stieß dabei auf eine Präsentation eines Netflix-Technikers, der vorgeschlagen hat, unsere Business-APIs auf Observable APIs zu verschieben, zum Beispiel:
%Vor% Ich habe jedoch keinen Ort gefunden, der erklärt, wie die Transaktionen in diesen Diensten verwaltet werden sollten. Zuerst habe ich nur meine Service-Implementierung mit @Transactional
Was wir wollen, ist, dass die Ausführung des gesamten Codes in Object.create
lambda ( s -> { // This code }
) in einer Transaktion erfolgt. JEDOCH , was tatsächlich passiert, ist Folgendes:
createVideoBasicInfo()
wird auf transaktionale Weise ausgeführt und gibt die kalte beobachtbare Variable zurück. save()
wird als atomare Transaktion ausgeführt. Offensichtlich ist dies sinnvoll, da der Spring-Proxy für die serviceImpl-Methoden gilt. Ich habe über Möglichkeiten nachgedacht, was ich wirklich erwarte, wie zum Beispiel eine programmatische Transaktion zu starten:
%Vor%Ist dies die empfohlene Methode zum Verwalten von Transaktionen beim Arbeiten mit reaktiven APIs?
Spring Data JpaRepository-Methodensignaturen sind bereits mit @Transactional gekennzeichnet. Wenn Sie also nur einen verwenden, müssen Sie nichts Besonderes tun:
%Vor% %Vor%Wenn Sie mehrere Repositories in einer Transaktion kombinieren müssen, könnten Sie etwas wie die folgende Klasse verwenden:
%Vor%Die Factory-Bean muss ebenfalls definiert werden:
%Vor%Service:
%Vor%Test:
%Vor% Ich würde gerne auf John Scattergood eine hervorragende Antwort geben. Meine typische Verwendung ist mit Observable.fromCallable()
, also habe ich nach einer Möglichkeit gesucht, dies zu tun, anstatt Observable.OnSubscribe
zu implementieren, also habe ich seine Technik so angepasst, dass Sie sie verwenden können, indem Sie Callable
Fabrikklasse:
%Vor%Ursprünglicher Code:
%Vor%Neuer Code:
%Vor% Stellen Sie sicher, dass die Methode, der Sie @Transactional
hinzufügen, public
ist, andernfalls kann Spring AOP dies nicht mitteilen
Tags und Links spring reactive-programming rx-java rx-android netflix