まず、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);
または、それらの間で変換する必要があります。 この要点 それを達成するのに役立つはずです