正确的方法来关闭CloseableHttpResponse / CloseableHttpClient

时间:2018-02-22 13:42:04

标签: java apache-httpclient-4.x resource-cleanup autocloseable

我使用CloseableHttpResponse(来自apache-httpclient-4.5.3),我不确定我是否正确使用它,我看到answer with no votes使用{{1}最后:

EntityUtils.consume

也是CloseableHttpClient是抽象的,并且没有紧密的方法来调用,尽管在answer使用了它:

CloseableHttpResponse response1 = httpclient.execute(httpGet);

try {

 System.out.println(response1.getStatusLine());

} finally {

 EntityUtils.consume(response1.getEntity());

目前,我在send方法中使用了CloseableHttpResponse response = httpclient.execute(httpget); try { //do something } finally { response.close(); } CloseableHttpClient的资源。

我想知道我没有错过任何资源打开或以错误的方式使用它:

CloseableHttpResponse

先谢谢你

2 个答案:

答案 0 :(得分:2)

文档here中已对此进行了详细说明 从文档中引用伪代码这是分配/取消分配CloseableHttpClient实例的典型方法:

CloseableHttpClient httpclient = HttpClients.createDefault();
try {
    <...>
} finally {
    httpclient.close();
}

同样适用于CloseableHttpResponse

CloseableHttpResponse response = httpclient.execute(httpget);
try {
    <...>
} finally {
    response.close();
}

现在,关于CloseableHttpClient中的close方法。 CloseableHttpClient是一个实现Closeable接口的抽象类。也就是说,虽然它本身没有close方法,但扩展它的类需要实现close方法。一个班级是InternalHttpClient。您可以查看源代码以获取详细信息。

答案 1 :(得分:2)

您可以通过使用try(resource)来避免final

  

try(CloseableHttpResponse响应= httpclient.execute(httpGet)){   ...}