Pertama-tama, Anda harus melihat dokumen Konfigurasi ThreadPoll , jika Anda belum melakukannya. Ini akan memberi Anda gambaran umum tentang kumpulan utas yang digunakan Play secara default dan cara mengubahnya (Anda mungkin tidak memerlukan kumpulan utas khusus hanya untuk melakukan kueri...).
Ini berisi banyak kiat, termasuk kiat untuk mengonfigurasi kumpulan utas yang dioptimalkan untuk operasi JDBC.
Sekarang, mengenai pertanyaan Anda, Anda hanya perlu menggunakan supplyAsync
dengan ExecutorService
khusus untuk melakukan apa yang Anda butuhkan. Contoh:
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));
});
}
Perhatikan bahwa dari kode Anda, Anda menggunakan Akka untuk mendapatkan ExecutionContext
(Scala), dan supplyAsync
mengharapkan Executor/ExecutorService
(Jawa). Jadi, Anda harus membuat ServiceExecutor
sendiri dan bagikan
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
atau Anda harus mengonversi di antara mereka. Intinya akan membantu Anda mencapainya