學(xué)習(xí)參考:https://www.cnblogs.com/softidea/p/5977375.html
RestTemplate有兩個(gè)構(gòu)造方法,分別是:
publicRestTemplate() {/**? ? ? ? ? ? ? ...初始化過程? ? ? ? ? */}
publicRestTemplate(ClientHttpRequestFactory requestFactory) {this();
? ? setRequestFactory(requestFactory);
}
其中宇弛,第二個(gè)構(gòu)造方法中可以傳入ClientHttpRequestFactory參數(shù)曾撤,第一個(gè)進(jìn)行默認(rèn)初始化祭埂,因?yàn)槲覀兘?jīng)常需要對請求超時(shí)進(jìn)行設(shè)置并能夠?qū)Τ瑫r(shí)進(jìn)行后續(xù)處理,而第一個(gè)構(gòu)造方法,我們無法控制超時(shí)時(shí)間抖棘,第二個(gè)構(gòu)造中的ClientHttpRequestFactory接口的實(shí)現(xiàn)類中存在timeout屬性箭券,因此選用第二個(gè)構(gòu)造方法净捅。
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(1000); requestFactory.setReadTimeout(1000); RestTemplate restTemplate =new RestTemplate(requestFactory);
注意:ClientHttpRequestFactory 接口有4個(gè)實(shí)現(xiàn)類,分別是:
AbstractClientHttpRequestFactoryWrapper 用來裝配其他request factory的抽象類辩块。
CommonsClientHttpRequestFactory 允許用戶配置帶有認(rèn)證和http連接池的httpclient蛔六,已廢棄,推薦用HttpComponentsClientHttpRequestFactory废亭。
HttpComponentsClientHttpRequestFactory 同2.
SimpleClientHttpRequestFactory 接口的一個(gè)簡單實(shí)現(xiàn)国章,可配置proxy,connectTimeout豆村,readTimeout等參數(shù)液兽。
配置案例:
private?ClientHttpRequestFactory getClientHttpRequestFactory() {
????int?timeout = 5000;
????RequestConfig config = RequestConfig.custom()
??????.setConnectTimeout(timeout)
??????.setConnectionRequestTimeout(timeout)
??????.setSocketTimeout(timeout)
??????.build();
????CloseableHttpClient client = HttpClientBuilder
??????.create()
??????.setDefaultRequestConfig(config)
??????.build();
????return?new?HttpComponentsClientHttpRequestFactory(client);
RestTemplate 設(shè)置 RequestFactory
其實(shí)任何有連接的地方都會有連接池的概念,比如數(shù)據(jù)庫連接等掌动,這里也不例外四啰,肯定也會有,RestTemplate 默認(rèn)有兩種工廠對象實(shí)現(xiàn)方式粗恢,都是 ClientHttpRequestFactory 的子類柑晒。如下
1)SimpleClientHttpRequestFactory 底層使用 java.net.HttpUrlConnection,可配置證書
2)HttpComponentsClientHttpRequestFactory 底層使用Apache HttpClient訪問遠(yuǎn)程的Http服務(wù)眷射,使用HttpClient同樣可以配置連接池和證書等信息匙赞,而且功能更強(qiáng)大,配置項(xiàng)更多妖碉。
RequestFactory 的配置方式
1)使用XML配置涌庭,就是配置JavaBean
2)使用代碼配置,就是初始化這個(gè)對象
無論上面那種方式配置嗅绸,都是配置外殼 RestTemplate脾猛,真正發(fā)送請求的 request 對象其實(shí)都是由工廠管理的,所以我們不關(guān)心連接池的管理鱼鸠,只是配置連接池初始化的一些參數(shù)而已猛拴。
這個(gè)可以參考: