Spring Webflux und Lesen aus der Datenbank

8

Spring 5 führt den reaktiven Programmierstil für Rest-APIs mit webflux . Ich bin selbst ziemlich neu dazu und habe mich gefragt, ob synchrone Aufrufe an eine Datenbank in Flux oder Mono sinngemäß sinnvoll sind? Wenn ja, ist dies der Weg, es zu tun:

%Vor%

Gibt es etwas wie ein asynchrones CrudRepository? Ich konnte es nicht finden.

    
Lukasz 17.02.2017, 13:40
quelle

2 Antworten

9

Eine Option wäre die Verwendung alternativer SQL-Clients, die vollständig nicht blockierend sind. Einige Beispiele umfassen: Ссылка oder Ссылка . Natürlich wird keiner dieser Treiber offiziell von Datenbankanbietern unterstützt. Außerdem ist die Funktionalität im Vergleich zu reifen JDBC-basierten Abstraktionen wie Hibernate oder jOOQ viel weniger attraktiv.

Die alternative Idee kam von der Scala-Welt zu mir. Die Idee besteht darin, blockierende Aufrufe in isolierten ThreadPool zu verteilen, um blockierende und nicht blockierende Aufrufe nicht miteinander zu mischen. Dies ermöglicht es uns, die Gesamtzahl der Threads zu steuern und die CPU im Hauptausführungskontext mit einigen potenziellen Optimierungen nicht blockierende Aufgaben ausführen zu lassen. Angenommen, wir haben eine JDBC-basierte Implementierung wie Spring Data JPA, die in der Tat blockiert, können wir die Ausführung asynchron machen und den dedizierten Thread-Pool bereitstellen.

%Vor%

Unser Scheduler für JDBC sollte mit einem dedizierten Threadpool konfiguriert werden, dessen Größe der Anzahl der Verbindungen entspricht.

%Vor%

Allerdings gibt es Schwierigkeiten mit diesem Ansatz. Die wichtigste ist das Transaktionsmanagement. In JDBC sind Transaktionen nur innerhalb einer einzigen java.sql.Connection möglich. Um mehrere Vorgänge in einer Transaktion durchzuführen, müssen sie sich eine Verbindung teilen. Wenn wir dazwischen Berechnungen durchführen wollen, müssen wir die Verbindung halten. Dies ist nicht sehr effektiv, da wir eine begrenzte Anzahl von Verbindungen inaktiv halten, während wir dazwischen Berechnungen durchführen.

Diese Idee eines asynchronen JDBC-Wrappers ist nicht neu und wurde bereits in der Scala-Bibliothek Slick 3 implementiert. Schließlich könnte nicht blockierende JDBC auf der Java-Roadmap erscheinen. Wie es bei JavaOne im September 2016 angekündigt wurde, und es ist möglich, dass wir es in Java 10 sehen werden.

    
Grygoriy Gonchar 22.05.2017 17:30
quelle
0

Spring Daten unterstützen reaktive Repository-Schnittstelle für Mongo und Cassandra.

Quelldaten MongoDb Reactive Interface

Spring Data MongoDB bietet reaktive Repository-Unterstützung für die reaktiven Typen Project Reactor und RxJava 1. Die reaktive API unterstützt die reaktive Typkonvertierung zwischen reaktiven Typen.

%Vor%

}

    
yousafsajjad 27.08.2017 05:03
quelle

Tags und Links