Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare un threadpool db in Play Java ed eseguire query db con questo pool

Prima di tutto, dovresti dare un'occhiata ai documenti sulla configurazione di ThreadPoll , se non l'hai ancora fatto. Dovrebbe darti una panoramica dei pool di thread utilizzati da Play per impostazione predefinita e di come modificarli (potresti non aver bisogno di un pool di thread specifico solo per eseguire query...).

Contiene molti suggerimenti, inclusi suggerimenti per configurare pool di thread ottimizzati per le operazioni JDBC.

Ora, per quanto riguarda la tua domanda, devi solo usare supplyAsync con un ExecutorService personalizzato per fare ciò di cui hai bisogno. Un esempio:

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));
    }); 
}

Nota che dal tuo codice stai usando Akka per ottenere un ExecutionContext (Scala) e supplyAsync si aspetta un Executor/ExecutorService (Giava). Quindi dovrai creare il tuo ServiceExecutor da solo e condividilo

// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);

o dovrai convertire tra di loro. Questo succo dovrebbe aiutarti a raggiungere questo obiettivo