使用 CompletionStage 获得 return 个结果
Using CompletionStage to return results
我是玩框架的新手Java8。我正在尝试在 Play 中编写一个简单的 Web 服务,它符合异步模型并允许 Web 服务快速调用 return,为异步线程留下繁重的工作。
我有一个很基础的操作
public CompletionStage<Result> getPeople() {
}
调用中的真正处理必须从数据库加载人员数据。数据库方法是
List<People> people = dbService.getPeople();
return ok(Json.tojson(people));
dbMethod 本身是异步的并且 returns CompletionStage>.
CompletionStage<List<People>> getPeople() {}
所以我的问题是我无法理解如何最好地将 Web 服务编程为该方法不会阻塞。
我可以在我的处理程序中做这样的事情
public CompletionStage<Result> getPeople() {
CompletableFuture.completedFuture(
ok(Json.toJson(dbservice.getPeople().get())));
}
这个问题是控制器在 "get" 方法中阻塞,而且它抛出异常,我不知道如何处理,除了使用标准的 try-catch 块(这也使它非异步)。
我也试过类似的方法
return CompletableFuture.supplyAsync(() -> {
return dbService.getPeople();
}).thenApply(i -> { ok(Json.toJson(i.get())); } );
但这会导致编译错误。
非常感谢您的帮助;因为我是 Java 异步编程的新手,尽管阅读了很多教程,但我不清楚如何最好地使用它们。
谢谢大家
你应该 return 你的未来,但将结果转换为 play.mvc.result:
public CompletionStage<Result> getPeople() {
return dbService.getPeople().thenApply(peopleList ->
ok(Json.toJson(peopleList))
);
}
我是玩框架的新手Java8。我正在尝试在 Play 中编写一个简单的 Web 服务,它符合异步模型并允许 Web 服务快速调用 return,为异步线程留下繁重的工作。
我有一个很基础的操作
public CompletionStage<Result> getPeople() {
}
调用中的真正处理必须从数据库加载人员数据。数据库方法是
List<People> people = dbService.getPeople();
return ok(Json.tojson(people));
dbMethod 本身是异步的并且 returns CompletionStage>.
CompletionStage<List<People>> getPeople() {}
所以我的问题是我无法理解如何最好地将 Web 服务编程为该方法不会阻塞。
我可以在我的处理程序中做这样的事情
public CompletionStage<Result> getPeople() {
CompletableFuture.completedFuture(
ok(Json.toJson(dbservice.getPeople().get())));
}
这个问题是控制器在 "get" 方法中阻塞,而且它抛出异常,我不知道如何处理,除了使用标准的 try-catch 块(这也使它非异步)。
我也试过类似的方法
return CompletableFuture.supplyAsync(() -> {
return dbService.getPeople();
}).thenApply(i -> { ok(Json.toJson(i.get())); } );
但这会导致编译错误。
非常感谢您的帮助;因为我是 Java 异步编程的新手,尽管阅读了很多教程,但我不清楚如何最好地使用它们。
谢谢大家
你应该 return 你的未来,但将结果转换为 play.mvc.result:
public CompletionStage<Result> getPeople() {
return dbService.getPeople().thenApply(peopleList ->
ok(Json.toJson(peopleList))
);
}