【问题标题】:Move CloseableHttpResponse inside nested try with resources使用资源在嵌套尝试中移动 CloseableHttpResponse
【发布时间】:2018-12-28 15:38:17
【问题描述】:

我使用 CloseableHttpResponse 的资源尝试使用以下代码

CloseableHttpResponse response = null;
try (CloseableHttpClient httpClient = HttpClients.custom().build()){    
    //code...
    response = httpClient.execute(target, post);
    String responseText = EntityUtils.toString(response.getEntity());   
} catch (Exception e) {
    logger.error("Failed sending request", e);
} finally {
    if (response != null) {
        try {
            response.close();
        } catch (IOException e) {
            logger.error("Failed releasing response", e);
        }
    }
}

我可以安全地用资源替换嵌套尝试吗:

try (CloseableHttpClient httpClient = HttpClients.custom().build()){
    URIBuilder uriBuilder = new URIBuilder(url);
    HttpHost target = new HttpHost(uriBuilder.getHost(), uriBuilder.getPort(), uriBuilder.getScheme());
    HttpPost post = new HttpPost(uriBuilder.build());
    try (CloseableHttpResponse response = httpClient.execute(target, post)) {
        String responseText = EntityUtils.toString(response.getEntity());   
    }
} catch (Exception e) {
    logger.error("Failed sending request", e);
}

或者最好对资源块使用一次尝试:

try (CloseableHttpClient httpClient = HttpClients.custom().build();
    CloseableHttpResponse response = getResponse(httpClient, url)) {

有时重构为单个块是有问题的,所以我想知道嵌套/附加块是一个有效的解决方案。

【问题讨论】:

    标签: java httpresponse apache-httpclient-4.x try-with-resources closeablehttpresponse


    【解决方案1】:

    HttpClient 永远不会返回 null HttpResponse 对象。第一个构造根本没有用。第二个和第三个构造都是完全有效的

    【讨论】:

    • 使用嵌套/附加的 try-with-resources 块有问题吗?
    • 不,没有。但是通常不应该为每个请求创建一个新的 HttpClient 实例。这是非常浪费和低效。
    • 你指的是使用PoolingHttpClientConnectionManager,如stackoverflow.com/questions/29959772/…
    • 具有持久连接的连接池当然是一件不应该扔掉的东西,而且其他昂贵的操作,如 SSL/TLS 上下文初始化,理想情况下应该只在运行时完成一项
    • 您对 SSL 的评论是否也与每小时 1 个请求相关?
    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2013-07-24
    • 1970-01-01
    • 2012-10-09
    • 2012-01-19
    相关资源
    最近更新 更多