Browse Source

Leverage R2BDC recent optimizations (#9341)

Should improve some DB tests very significantly
under high load!
Sébastien Deleuze 9 months ago
parent
commit
25b97fdb7a

+ 2 - 0
frameworks/Java/spring-webflux/pom.xml

@@ -19,6 +19,8 @@
     <properties>
     <properties>
         <java.version>21</java.version>
         <java.version>21</java.version>
         <jstachio.version>1.3.6</jstachio.version>
         <jstachio.version>1.3.6</jstachio.version>
+        <r2dbc-pool.version>1.0.2.RELEASE</r2dbc-pool.version>
+        <r2dbc-postgresql.version>1.0.7.RELEASE</r2dbc-postgresql.version>
     </properties>
     </properties>
 
 
     <dependencies>
     <dependencies>

+ 4 - 15
frameworks/Java/spring-webflux/src/main/java/benchmark/repository/R2dbcDbRepository.java

@@ -6,8 +6,6 @@ import org.springframework.stereotype.Component;
 
 
 import benchmark.model.Fortune;
 import benchmark.model.Fortune;
 import benchmark.model.World;
 import benchmark.model.World;
-import io.r2dbc.spi.Connection;
-import io.r2dbc.spi.ConnectionFactory;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 import reactor.core.publisher.Mono;
 
 
@@ -16,12 +14,9 @@ import reactor.core.publisher.Mono;
 public class R2dbcDbRepository implements DbRepository {
 public class R2dbcDbRepository implements DbRepository {
 
 
     private final DatabaseClient databaseClient;
     private final DatabaseClient databaseClient;
-    private final ConnectionFactory connectionFactory;
-    private final ThreadLocal<Mono<? extends Connection>> conn = new ThreadLocal<>();
 
 
     public R2dbcDbRepository(DatabaseClient databaseClient) {
     public R2dbcDbRepository(DatabaseClient databaseClient) {
         this.databaseClient = databaseClient;
         this.databaseClient = databaseClient;
-        this.connectionFactory = databaseClient.getConnectionFactory();
     }
     }
 
 
     @Override
     @Override
@@ -54,16 +49,10 @@ public class R2dbcDbRepository implements DbRepository {
 
 
     @Override
     @Override
     public Flux<Fortune> fortunes() {
     public Flux<Fortune> fortunes() {
-        return getConnection()
-                .flatMapMany(conn -> conn.createStatement("SELECT id, message FROM " + "fortune").execute())
-                .flatMap(result -> result.map(r -> new Fortune(r.get(0, Integer.class), r.get(1, String.class))));
-    }
-
-    private Mono<? extends Connection> getConnection() {
-        if (this.conn.get() == null) {
-            this.conn.set(Mono.from(connectionFactory.create()).cache());
-        }
-        return this.conn.get();
+        return databaseClient
+                .sql("SELECT id, message FROM fortune")
+                .mapProperties(Fortune.class)
+                .all();
     }
     }
 
 
 }
 }