Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar db threadpool no Play java e fazer consultas db com este pool


Antes de tudo, você deve dar uma olhada nos Documentos de configuração do ThreadPoll , se você ainda não fez isso. Ele deve fornecer uma visão geral dos pools de threads que o Play usa por padrão e como ajustá-los (você pode não precisar de um pool de threads específico apenas para fazer consultas ...).

Ele contém muitas dicas, incluindo dicas para configurar conjuntos de encadeamentos otimizados para operações JDBC.

Agora, em relação à sua pergunta, você só precisa usar supplyAsync com um ExecutorService personalizado para fazer o que você precisa. Um exemplo:
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));
    }); 
}

Observe que, a partir do seu código, você está usando o Akka para obter um ExecutionContext (Scala) e o supplyAsync espera um Executor/ExecutorService (Java). Então você terá que criar seu ServiceExecutor por si mesmo e compartilhá-lo
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);

ou você terá que converter entre eles. Esta essência deve ajudá-lo a conseguir isso