Nejprve byste se měli podívat na Dokumenty konfigurace ThreadPoll , pokud jste to ještě neudělali. Měl by vám poskytnout přehled o fondech vláken, které Play ve výchozím nastavení používá, a o tom, jak je vyladit (možná nebudete potřebovat konkrétní fond vláken jen pro zadávání dotazů...).
Obsahuje spoustu tipů, včetně tipů pro konfiguraci fondů vláken optimalizovaných pro operace JDBC.
Nyní, pokud jde o vaši otázku, stačí použít supplyAsync
s vlastní ExecutorService
dělat, co potřebujete. Příklad:
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));
});
}
Všimněte si, že z vašeho kódu používáte Akka k získání ExecutionContext
(Scala) a supplyAsync
očekává Executor/ExecutorService
(Jáva). Takže budete muset vytvořit svůj ServiceExecutor
sami a sdílejte to
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
nebo mezi nimi budete muset převádět. Toto shrnutí by vám to mělo pomoci dosáhnout