Play Framework:如何创建&使用连接池?

时间:2012-01-17 08:11:51

标签: java playframework connection-pooling

在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连接池,数据库连接池等。我该怎么做?

感谢。

1 个答案:

答案 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
    }
}