1
我是新來玩框架和Java8。我正在嘗試在Play中編寫一個簡單的Web服務,它符合Asynch模型,並允許Web服務調用快速返回,爲異步線程留下沉重的負擔。使用CompletionStage返回結果
我有一個非常基本的操作
public CompletionStage<Result> getPeople() {
}
在調用真正的處理必須從數據庫中加載的人的數據。 db方法是
List<People> people = dbService.getPeople();
return ok(Json.tojson(people));
dbMethod本身是異步的並返回CompletionStage>。
CompletionStage<List<People>> getPeople() {}
所以我的問題是,我不明白如何最好地編程Web服務,該方法不會阻止。
我可以做這樣的事情在我的處理程序
public CompletionStage<Result> getPeople() {
CompletableFuture.completedFuture(
ok(Json.toJson(dbservice.getPeople().get())));
}
這個問題是,在「弄」法controllel塊,還在於它拋出異常,我不知道如何處理比其他使用標準的try-catch塊(這也使其非異步)。
我也嘗試過這樣的事情
return CompletableFuture.supplyAsync(() -> {
return dbService.getPeople();
}).thenApply(i -> { ok(Json.toJson(i.get())); });
但是,讓編譯錯誤。
我真的很感謝這裏的一些幫助;因爲我對Java異步編程非常陌生,儘管閱讀了很多教程,但我不清楚如何最好地使用這些教程。
謝謝大家。
您在使用播放2.5.X?使用'supplyAsync'時編譯錯誤是什麼? – Anton