Първо, трябва да разгледате документите за конфигурация на ThreadPoll , ако все още не сте го направили. Трябва да ви даде общ преглед на пуловете от нишки, които Play използва по подразбиране, и как да ги настроите (може да не се нуждаете от конкретен пул от нишки само за да правите заявки...).
Той съдържа много съвети, включително съвети за конфигуриране на пулове от нишки, оптимизирани за JDBC операции.
Сега, по отношение на вашия въпрос, просто трябва да използвате supplyAsync
с персонализиран ExecutorService
да направиш каквото ти трябва. Пример:
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));
});
}
Забележете, че от вашия код използвате Akka, за да получите ExecutionContext
(Scala) и supplyAsync
очаква Executor/ExecutorService
(Java). Така че ще трябва да създадете своя ServiceExecutor
сами и го споделете
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
или ще трябва да конвертирате между тях. Тази същност трябва да ви помогне да постигнете това