sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit db threadpool v Play Java a provádět db dotazy s tímto fondem

Nejprve byste se měli podívat na Dokumenty konfigurace ThreadPoll , pokud jste to ještě neudělali. Měl by vám poskytnout přehled o fondech vláken, které Play ve výchozím nastavení používá, a o tom, jak je vyladit (možná nebudete potřebovat konkrétní fond vláken jen pro zadávání dotazů...).

Obsahuje spoustu tipů, včetně tipů pro konfiguraci fondů vláken optimalizovaných pro operace JDBC.

Nyní, pokud jde o vaši otázku, stačí použít supplyAsync s vlastní ExecutorService dělat, co potřebujete. Příklad:

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

Všimněte si, že z vašeho kódu používáte Akka k získání ExecutionContext (Scala) a supplyAsync očekává Executor/ExecutorService (Jáva). Takže budete muset vytvořit svůj ServiceExecutor sami a sdílejte to

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

nebo mezi nimi budete muset převádět. Toto shrnutí by vám to mělo pomoci dosáhnout




  1. Změňte a resetujte kořenové heslo MySQL

  2. Důvody, proč nepoužívat GROUP_CONCAT?

  3. Vkládání náhodných čísel do tabulky v MYSQL

  4. Jak vyřešit CHYBU 1060:Duplicitní název sloupce pomocí Zobrazení -> Vytvořit zobrazení