Allereerst moet je de ThreadPoll-configuratiedocumenten bekijken , als je dat nog niet hebt gedaan. Het zou je een overzicht moeten geven van de threadpools die Play standaard gebruikt en hoe je ze kunt aanpassen (je hebt misschien geen specifieke threadpool nodig om alleen query's uit te voeren...).
Het bevat veel tips, waaronder tips om threadpools te configureren die zijn geoptimaliseerd voor JDBC-bewerkingen.
Nu, met betrekking tot uw vraag, hoeft u alleen maar supplyAsync
. te gebruiken met een aangepaste ExecutorService
om te doen wat je nodig hebt. Een voorbeeld:
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));
});
}
Merk op dat je uit je code Akka gebruikt om een ExecutionContext
. te krijgen (Scala), en de supplyAsync
verwacht een Executor/ExecutorService
(Java). U moet dus uw ServiceExecutor
. maken zelf en deel het
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
of u zult tussen hen moeten converteren. Deze kern zou je moeten helpen dat te bereiken