Först och främst bör du ta en titt på ThreadPoll Configuration docs , om du inte har gjort det än. Det bör ge dig en översikt över trådpoolerna Play använder som standard och hur man justerar dem (du kanske inte behöver en specifik trådpool bara för att göra frågor...).
Den innehåller många tips, inklusive tips för att konfigurera trådpooler optimerade för JDBC-operationer.
Nu, angående din fråga, behöver du bara använda supplyAsync
med en anpassad ExecutorService
att göra det du behöver. Ett exempel:
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));
});
}
Lägg märke till att från din kod använder du Akka för att få en ExecutionContext
(Scala) och supplyAsync
förväntar sig en Executor/ExecutorService
(Java). Så du måste skapa din ServiceExecutor
själv och dela det
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
eller så måste du konvertera mellan dem. Denna sammanfattning bör hjälpa dig att uppnå det