Prima di tutto, dovresti dare un'occhiata ai documenti sulla configurazione di ThreadPoll , se non l'hai ancora fatto. Dovrebbe darti una panoramica dei pool di thread utilizzati da Play per impostazione predefinita e di come modificarli (potresti non aver bisogno di un pool di thread specifico solo per eseguire query...).
Contiene molti suggerimenti, inclusi suggerimenti per configurare pool di thread ottimizzati per le operazioni JDBC.
Ora, per quanto riguarda la tua domanda, devi solo usare supplyAsync
con un ExecutorService
personalizzato per fare ciò di cui hai bisogno. Un esempio:
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));
});
}
Nota che dal tuo codice stai usando Akka per ottenere un ExecutionContext
(Scala) e supplyAsync
si aspetta un Executor/ExecutorService
(Giava). Quindi dovrai creare il tuo ServiceExecutor
da solo e condividilo
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
o dovrai convertire tra di loro. Questo succo dovrebbe aiutarti a raggiungere questo obiettivo