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