En primer lugar, debe echar un vistazo a los Documentos de configuración de ThreadPoll , si aún no lo has hecho. Debería brindarle una descripción general de los grupos de subprocesos que Play usa de forma predeterminada y cómo modificarlos (es posible que no necesite un grupo de subprocesos específico solo para hacer consultas...).
Contiene muchos consejos, incluidos consejos para configurar grupos de subprocesos optimizados para operaciones JDBC.
Ahora, con respecto a tu pregunta, solo tienes que usar supplyAsync
con un ExecutorService
personalizado para hacer lo que necesitas. Un ejemplo:
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));
});
}
Tenga en cuenta que a partir de su código, está utilizando Akka para obtener un ExecutionContext
(Scala) y supplyAsync
espera un Executor/ExecutorService
(Java). Entonces tendrás que crear tu ServiceExecutor
por ti mismo y compártelo
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
o tendrá que convertir entre ellos. Esta esencia debería ayudarte a lograrlo