httpclient4.5如何确保资源释放

更新:releaseConnection()这个方法已经再也不推荐了,我用的httpclient4.5的jar包,不须要对request进行这个操做了,看官方文档解释是更换了链接池管理类,最新的是:PoolingHttpClientConnectionManager。java

在请求失败的时候response为空,故关闭以前作非空校验。下面是我新的方法:编程

/**
	 * 根据响应获取响应实体
	 *
	 * @param response
	 * @return
	 */
	private static String getContent(CloseableHttpResponse response) {
		HttpEntity entity = response.getEntity();// 获取响应实体
		String content = EMPTY;
		try {
			content = EntityUtils.toString(entity, UTF_8);// 用string接收响应实体
			EntityUtils.consume(entity);// 消耗响应实体,并关闭相关资源占用
			if (response != null) response.close();
		} catch (ParseException e1) {
			output("解析响应实体异常!", e1);
		} catch (IOException e1) {
			output("解析响应实体时java IO 异常!", e1);
		}
		return content;
	}

--------------------------------分割线--------------------------------------框架

本人在学习使用httpclient的过程当中,对于资源释放的一直很不理解,最近特地研究了一下这块,网上不少教程和文章形成了一些误导,多是由于时间比较久了,版本更新致使的,个人版本是httpclient4.5,关于资源释放的分享一下本身的理解,若有不正确的地方,还请指出。性能

如下内容是我关于资源释放的理解,创建在自己项目的基础上的,有些地方并非官方给的方法,主要是在消耗相应实体方面,我并无使用abort()方法,由于没有这个需求。本文因此代码只是创建在普通请求的基础上,不涉及链接池和链接管理器相关内容。学习

关于response如何关闭:测试

CloseableHttpResponse response = null;// 建立响应对象
		//中间作一些事情
		try {
			response.close();
		} catch (IOException e2) {
			output("响应关闭失败!", e2);
		}

这里插一句,只有你肯定响应长度以后才能用这个方法,否则你得关闭各类流,而后调用一个consume()方法。或者直接用abort()方法,或者使用官方推荐关闭方法。命令行

 

推荐消耗实体内容的方式是使用它的HttpEntity#getContent()或HttpEntity#writeTo(OutputStream)方法。3d

关于释放链接,这个就比较简单了,请求完成以后,执行释放链接的方法就能够了:code

request.releaseConnection();对象

在释放后能够复用的,以前看到一些方法有些在释放后是不能够复用的,这个具体得在链接池和链接管理器中再具体介绍了。

最后的最后的,必定要关闭客户端:

protected static CloseableHttpClient httpClient = getCloseableHttpClients();
//中间作一些事情,最后必定要关闭
	httpClient.close();

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给全部人的编程思惟
  8. 如何测试几率型业务接口
  9. httpclient处理多用户同时在线
  10. 成为杰出Java开发人员的10个步骤
  11. 将swagger文档自动变成测试代码

公众号地图 ☢️ 一块儿来~FunTester

相关文章
相关标签/搜索