sql >> Database teknologi >  >> RDS >> Mysql

Sådan opretter du db threadpool i Play java og laver db-forespørgsler med denne pool

Først og fremmest bør du tage et kig på ThreadPoll Configuration docs , hvis du ikke har gjort det endnu. Det skulle give dig et overblik over de trådpuljer, Play bruger som standard, og hvordan du justerer dem (du behøver muligvis ikke en specifik trådpulje bare for at lave forespørgsler...).

Den indeholder en masse tips, herunder tips til at konfigurere trådpuljer, der er optimeret til JDBC-operationer.

Hvad angår dit spørgsmål, skal du bare bruge supplyAsync med en tilpasset ExecutorService at gøre, hvad du har brug for. Et eksempel:

public CompletionStage<Result> getData() {
    CompletableFuture<List<SqlRow>> cf = new CompletableFuture<>();
    return cf.supplyAsync(() -> {
        return Ebean.createSqlQuery("SELECT * FROM Users").findList();
    }, ec) // <-- 'ec' is the ExecutorService you want to use
    .thenApply(rows -> {
       return ok(Json.toJson(rows));
    }); 
}

Bemærk, at du fra din kode bruger Akka til at få en ExecutionContext (Scala) og supplyAsync forventer en Executor/ExecutorService (Java). Så du bliver nødt til at oprette din ServiceExecutor selv og del det

// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);

eller du bliver nødt til at konvertere mellem dem. Denne kerne skal hjælpe dig med at opnå det




  1. Simpel If Else-sætning i sql

  2. MySQL unikt indeks af flere felter

  3. hvordan man viser hide html-tabelrække baseret på php-tilstand

  4. INNER JOIN samme bord