Tout d'abord, vous devriez jeter un œil à la docs de configuration de ThreadPoll , si vous ne l'avez pas encore fait. Il devrait vous donner un aperçu des pools de threads que Play utilise par défaut et comment les modifier (vous n'avez peut-être pas besoin d'un pool de threads spécifique juste pour faire des requêtes...).
Il contient de nombreux conseils, notamment des conseils pour configurer des pools de threads optimisés pour les opérations JDBC.
Maintenant, concernant votre question, il vous suffit d'utiliser supplyAsync
avec un ExecutorService
personnalisé pour faire ce dont vous avez besoin. Un exemple :
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));
});
}
Notez qu'à partir de votre code, vous utilisez Akka pour obtenir un ExecutionContext
(Scala), et le supplyAsync
attend un Executor/ExecutorService
(Java). Il vous faudra donc créer votre ServiceExecutor
par vous-même et partagez-le
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
ou vous devrez convertir entre eux. Cet essentiel devrait vous aider à y parvenir