我是玩框架和Java8的新手。我正在尝试在 Play 中编写一个简单的 Web 服务,它符合异步模型并允许 Web 服务调用快速返回,从而为异步线程留下繁重的工作。
我有一个非常基本的操作
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())));
}
问题在于控制器在“get”方法处阻塞,并且它抛出除了使用标准 try-catch 块(这也使其非异步)之外我不知道如何处理的异常。
我也尝试过这样的事情
return CompletableFuture.supplyAsync(() -> {
return dbService.getPeople();
}).thenApply(i -> { ok(Json.toJson(i.get())); } );
但这会产生编译错误。
我将非常感谢这里的一些帮助;因为我对 Java 异步编程非常陌生,尽管阅读了很多教程,但我不清楚如何最好地使用这些教程。
谢谢你们。