Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създадете db threadpool в Play Java и да правите db заявки с този pool

Първо, трябва да разгледате документите за конфигурация на ThreadPoll , ако все още не сте го направили. Трябва да ви даде общ преглед на пуловете от нишки, които Play използва по подразбиране, и как да ги настроите (може да не се нуждаете от конкретен пул от нишки само за да правите заявки...).

Той съдържа много съвети, включително съвети за конфигуриране на пулове от нишки, оптимизирани за JDBC операции.

Сега, по отношение на вашия въпрос, просто трябва да използвате supplyAsync с персонализиран ExecutorService да направиш каквото ти трябва. Пример:

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

Забележете, че от вашия код използвате Akka, за да получите ExecutionContext (Scala) и supplyAsync очаква Executor/ExecutorService (Java). Така че ще трябва да създадете своя ServiceExecutor сами и го споделете

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

или ще трябва да конвертирате между тях. Тази същност трябва да ви помогне да постигнете това




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на XAMPP и Mysql Workbench заедно

  2. Грешка #2002 Не мога да се свържа с локален MySQL сървър чрез сокет '/Applications/MAMP/tmp/mysql/mysql.sock' (2)

  3. Данните от базата данни за достъп до приложения на C# на Windows не се запазват при затваряне

  4. Синтактична грешка в Rails и MySQL с множество SQL изрази в блок за изпълнение

  5. как да получите достъп до отдалечена база данни на mysql