在Play文档中有以下示例:
public class AsyncTest extends Controller {
public static void remoteData() {
F.Promise<WS.HttpResponse> r1 = WS.url("http://example.org/1").getAsync();
F.Promise<WS.HttpResponse> r2 = WS.url("http://example.org/2").getAsync();
F.Promise<WS.HttpResponse> r3 = WS.url("http://example.org/3").getAsync();
F.Promise<List<WS.HttpResponse>> promises = F.Promise.waitAll(r1, r2, r3);
// Suspend processing here, until all three remote calls are complete.
List<WS.HttpResponse> httpResponses = await(promises);
render(httpResponses);
}
}
在上面的示例中,创建了3个与HTTP
的{{1}}新连接,是否正确?
有没有办法在启动时创建连接池,然后只抓取并重用该池中的连接,而不是重复创建和拆除连接?
理想情况下,我可以拥有多个连接池,例如HTTP连接池,数据库连接池等。我该怎么做?
感谢。
答案 0 :(得分:1)
在您的示例中,您没有获得连接,您正在获取HttpResponses,它是您在给定URL上发出的特定GET请求的答案。因为您使用的API是与连接无关的,所以底层框架可以创建3个单独的连接,或者它可以为所有3个连接重用单个连接,您应该得到相同的答案。
我不知道框架在做什么,但我敢打赌它非常好。
但是,如果要在应用程序启动时手动建立一组资源(可能是与工作节点的TCP连接?),您可以在应用程序启动时初始化任何内容,如下所示:
import play.jobs.Job;
import play.jobs.OnApplicationStart;
@OnApplicationStart
public class InitializeConnectionPool extends Job {
@Override
public void doJob() {
//initialize your connection pools here, storing them in a static variable
}
}