Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erstellen Sie einen DB-Threadpool in Play Java und führen DB-Abfragen mit diesem Pool durch

Zunächst sollten Sie sich die ThreadPoll-Konfigurationsdokumentation ansehen , falls du das noch nicht getan hast. Es sollte Ihnen einen Überblick über die Thread-Pools geben, die Play standardmäßig verwendet, und wie Sie sie optimieren können (Sie benötigen möglicherweise keinen bestimmten Thread-Pool, nur um Abfragen durchzuführen ...).

Es enthält viele Tipps, einschließlich Tipps zum Konfigurieren von Thread-Pools, die für JDBC-Operationen optimiert sind.

Nun zu Ihrer Frage, Sie müssen nur noch supplyAsync verwenden mit einem benutzerdefinierten ExecutorService zu tun, was Sie brauchen. Ein Beispiel:

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

Beachten Sie, dass Sie in Ihrem Code Akka verwenden, um einen ExecutionContext zu erhalten (Scala) und supplyAsync erwartet einen Executor/ExecutorService (Java). Sie müssen also Ihren ServiceExecutor erstellen selbst erstellen und teilen

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

oder Sie müssen zwischen ihnen konvertieren. Dieser Kern sollte Ihnen dabei helfen, das zu erreichen