Przede wszystkim zapoznaj się z dokumentacją dotyczącą konfiguracji ThreadPoll , jeśli jeszcze tego nie zrobiłeś. Powinien dać ci przegląd pul wątków, których Play używa domyślnie i jak je dostosować (możesz nie potrzebować określonej puli wątków tylko do wykonywania zapytań...).
Zawiera wiele wskazówek, w tym wskazówki dotyczące konfigurowania pul wątków zoptymalizowanych pod kątem operacji JDBC.
Teraz, jeśli chodzi o twoje pytanie, wystarczy użyć supplyAsync
z niestandardową usługą ExecutorService
robić to, czego potrzebujesz. Przykład:
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));
});
}
Zauważ, że ze swojego kodu używasz Akka, aby uzyskać ExecutionContext
(Scala) i supplyAsync
oczekuje Executor/ExecutorService
(Jawa). Musisz więc utworzyć swój ServiceExecutor
samodzielnie i podziel się nim
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
albo będziesz musiał dokonać konwersji między nimi. Ten sedno powinien pomóc ci to osiągnąć