sql >> Base de Datos >  >> RDS >> Mysql

Cómo crear un grupo de subprocesos de db en Play java y hacer consultas de db con este grupo

En primer lugar, debe echar un vistazo a los Documentos de configuración de ThreadPoll , si aún no lo has hecho. Debería brindarle una descripción general de los grupos de subprocesos que Play usa de forma predeterminada y cómo modificarlos (es posible que no necesite un grupo de subprocesos específico solo para hacer consultas...).

Contiene muchos consejos, incluidos consejos para configurar grupos de subprocesos optimizados para operaciones JDBC.

Ahora, con respecto a tu pregunta, solo tienes que usar supplyAsync con un ExecutorService personalizado para hacer lo que necesitas. Un ejemplo:

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

Tenga en cuenta que a partir de su código, está utilizando Akka para obtener un ExecutionContext (Scala) y supplyAsync espera un Executor/ExecutorService (Java). Entonces tendrás que crear tu ServiceExecutor por ti mismo y compártelo

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

o tendrá que convertir entre ellos. Esta esencia debería ayudarte a lograrlo