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

相關文章
相關標籤/搜索