簡介
在微服務架構或者REST API項目中,使用Spring管理Bean是很常見的,在項目中HttpClient使用的一種最常見方式就是:使用Spring容器XML配置方式代替Java編碼方式進行HttpClient連接池的管理,然后將HttpClient的doGet()和doPost()等操作封裝成工具類或者Service注入到其他服務中進行調用。
Spring集成HttpClient過程
首先創建一個使用Spring的web項目,在Resources資源文件中添加springContext-httpclient.xml文件

然后,創建屬性文件httpclient.properties
httpclient.properties http.maxTotal=200 http.defaultMaxPerRoute=20 http.connectTimeout=1000 http.connectionRequestTimeout=500 http.socketTimeout=10000 http.staleConnectionCheckEnabled=true
最后,在啟動Spring容器時,加載屬性文件和springContext-httpclient.xml配置文件即可。

springContext-httpclient.xml配置文件解析
1. 創建連接池管理器對象,並設置最大連接數和每個主機地址並發數,下圖所示配置bean的id=httpClientConnectionManager,即對應使用Java代碼創建的對象cm。

2.創建HttpClient對象並配置請求參數
HttpClient接口和CloseableHttpClient實現類層次結構

HttpClients源碼中使用custom()方法構建HttpClientBuilder對象

HttpClientBuilder實現在build()方法獲取HttpClient對象,先從連接池中獲取,如果連接池為空就進行一系列默認的配置並創建連接池對象;如果連接池不為空,就判斷連接的可重用性,獲取有效連接。HttpClientBuilder部分源碼如下:

創建httpClientBuilder的過程如下:

請求參數RequestConfig的配置如下:

3.開啟線程定時清理無效連接

總結
Spring整合HttpClient連接池的過程很簡單,其實就是將《HttpClient實戰二》中使用Java代碼方式實現的HttpClient連接池方式,修改成Spring容器管理Bean的方式,這樣就不必每次都創建一個信息連接池對象,而是從Spring容器中注入即可。