सबसे पहले, आपको ThreadPoll Configuration docs पर एक नज़र डालनी चाहिए। , अगर आपने अभी तक ऐसा नहीं किया है। यह आपको थ्रेड पूल का एक सिंहावलोकन देना चाहिए Play डिफ़ॉल्ट रूप से उपयोग करता है और उन्हें कैसे ट्विक करना है (आपको केवल क्वेरी करने के लिए एक विशिष्ट थ्रेड पूल की आवश्यकता नहीं हो सकती है...)।
इसमें जेडीबीसी संचालन के लिए अनुकूलित थ्रेड पूल को कॉन्फ़िगर करने के सुझावों सहित कई युक्तियां शामिल हैं।
अब, अपने प्रश्न के संबंध में, आपको बस 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));
});
}
ध्यान दें कि आपके कोड से, आप ExecutionContext
. प्राप्त करने के लिए अक्का का उपयोग कर रहे हैं (स्काला), और supplyAsync
एक Executor/ExecutorService
की अपेक्षा करता है (जावा)। तो आपको अपना ServiceExecutor
बनाना होगा अपने आप से और इसे साझा करें
// Thread pool with 10 threads
ExecutorService ec = Executors.newFixedThreadPool(10);
या आपको उनके बीच कनवर्ट करना होगा। यह सार आपको इसे हासिल करने में मदद करनी चाहिए