sql >> Databasteknik >  >> RDS >> Mysql

Hur man skapar db threadpool i Play java och gör db-frågor med denna pool

Först och främst bör du ta en titt på ThreadPoll Configuration docs , om du inte har gjort det än. Det bör ge dig en översikt över trådpoolerna Play använder som standard och hur man justerar dem (du kanske inte behöver en specifik trådpool bara för att göra frågor...).

Den innehåller många tips, inklusive tips för att konfigurera trådpooler optimerade för JDBC-operationer.

Nu, angående din fråga, behöver du bara använda supplyAsync med en anpassad ExecutorService att göra det du behöver. Ett exempel:

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

Lägg märke till att från din kod använder du Akka för att få en ExecutionContext (Scala) och supplyAsync förväntar sig en Executor/ExecutorService (Java). Så du måste skapa din ServiceExecutor själv och dela det

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

eller så måste du konvertera mellan dem. Denna sammanfattning bör hjälpa dig att uppnå det




  1. Olika resultat i sqlfiddle.com 5.5.30 och MariaDB 5.5.31

  2. Hur kan jag snabba upp denna SELECT CONCAT/GROUP BY-fråga?

  3. SQL:Hur man utför sträng är inte lika

  4. Är det möjligt att dölja lösenordet i MySQL General/Slow Query Logs?