播放帧工作 2.2 并发执行的工作原理



最近,我们开始使用play 2.2。以前我们使用的是游戏2.1.3。在play 2.2中,它说Akka.future和异步方法被视为已弃用。此外,当我们尝试通过循环fetchSample()运行以下代码段时,需要更多时间才能在 play 2.2 中完成。

那么我们如何用最新的代码替换下面不推荐使用的代码呢?

private static Promise<SampleDBResponseBean> fetchSample(
        final Document sampleDoc) throws Exception {
    Promise<SampleBean> promiseOfSampleJson = Akka.future(
    new Callable<SampleBean>() {
        public SampleBean call() throws Exception
        {
            return doSomeCalc(sampleDoc);
        }
    });
}
private Result getAsyncResult(final SampleResponseBean sampleDbResponseBean) {
    List<F.Promise<? extends SampleDBResponseBean>> promiseList = sampleDbResponseBean
            .getSampleHelperList();
    Promise<List<SampleDBResponseBean>> promiseJsonObjLists = Promise
            .sequence(promiseList);
    return async(
    promiseJsonObjLists.map(
    new Function<List<SampleDBResponseBean>, Result>() {
        public Result apply(List<SampleDBResponseBean> sampleList) {
            SampleResponseBean sampleResponseBean = new SampleResponseBean();
            sampleResponseBean.setStatus("success");
            sampleResponseBean.setSampleList(sampleList);
            JsonNode jsNodeResponse = Json.toJson(sampleResponseBean);
            return ok(jsNodeResponse);
        }
    }));
}

我搜索了很多地方,但没有看到任何解决方案。与2.1.3相比,该问题会影响我们的代码性能。

任何想法我们如何在play 2.2中实现上述 2 种方法的弃用方法?

正如迁移文档中指出的那样:

http://www.playframework.com/documentation/2.2.x/Migration22

您想使用Promise.promise . 文档中也对此进行了描述:

http://www.playframework.com/documentation/2.2.x/JavaAsync

当然,在 API 文档中:

http://www.playframework.com/documentation/2.2.x/api/java/play/libs/F.Promise.html#promise(play.libs.F.Function0)

Play 2.2 Java 承诺的一个真正好处是,现在您可以精确控制代码在哪个执行上下文中运行,因此您可以创建自己的执行上下文,或者从 Akka 获取一个,从而准确控制有多少并发数据库操作同时在整个应用程序中运行。

最新更新