SpringBoot 對(duì)RestTemplate的初始化

代碼部分:

import org.apache.http.client.HttpClient;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.config.Registry;

import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.socket.ConnectionSocketFactory;

import org.apache.http.conn.socket.PlainConnectionSocketFactory;

import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.http.client.ClientHttpRequestFactory;

import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;

import org.springframework.web.client.RestTemplate;

/**

* 聲明并初始化連接池用于調(diào)用外部服務(wù)接口

*/@Configurationpublic classRestTemplateConfig{

? ? @Autowired? ? private HttpPoolConfig httpPoolProperties;

? ? @Bean? ? public RestTemplate restTemplate() {

? ? ? ? return new RestTemplate(httpRequestFactory());

? ? }

? ? @Bean? ? public ClientHttpRequestFactory httpRequestFactory() {

? ? ? ? return new HttpComponentsClientHttpRequestFactory(httpClient());

? ? }

? ? @Bean? ? public HttpClient httpClient() {

? ? ? ? Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()

? ? ? ? ? ? ? ? .register("http", PlainConnectionSocketFactory.getSocketFactory())

? ? ? ? ? ? ? ? .register("https", SSLConnectionSocketFactory.getSocketFactory())

? ? ? ? ? ? ? ? .build();

? ? ? ? PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);

? ? ? ? connectionManager.setMaxTotal(httpPoolProperties.maxTotal);

? ? ? ? connectionManager.setDefaultMaxPerRoute(httpPoolProperties.defaultMaxPerRoute);

? ? ? ? connectionManager.setValidateAfterInactivity(httpPoolProperties.validateAfterInactivity);

? ? ? ? RequestConfig requestConfig = RequestConfig.custom()

? ? ? ? ? ? ? ? .setSocketTimeout(httpPoolProperties.socketTimeout) //服務(wù)器返回?cái)?shù)據(jù)(response)的時(shí)間,超過拋出read timeout? ? ? ? ? ? ? ??

????????????????.setConnectTimeout(httpPoolProperties.connectTimeout) //連接上服務(wù)器(握手成功)的時(shí)間,超出拋出connect timeout? ?

? ? ? ? ? ? ? ? ?.setConnectionRequestTimeout(httpPoolProperties.connectionRequestTimeout)//從連接池中獲取連接的超時(shí)時(shí)間盆顾,超時(shí)間未拿到可用連接丰榴,會(huì)拋出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool? ? ? ? ? ? ? ??

????????????????.build();

? ? ? ????????? return HttpClientBuilder.create()

? ? ? ? ? ? ? ? .setDefaultRequestConfig(requestConfig)

? ? ? ? ? ? ? ? .setConnectionManager(connectionManager)

? ? ? ? ? ? ? ? .build();

? ? }

}

參數(shù)部分(application.yml文件)

httpclient:

?????# 最大連接數(shù)

?????maxtotal: 64?

?????# 每個(gè)route默認(rèn)的最大連接數(shù)

?????defaultMaxPerRoute: 64?

?????# 連接上服務(wù)器(握手成功)的時(shí)間者祖,超出拋出connect timeout?

?????connectTimeout: 10000?

?????# 從連接池中獲取連接的超時(shí)時(shí)間缴川,超時(shí)間未拿到可用連接厕诡,會(huì)拋出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool?

?????connectionRequestTimeout: 10000?

?????# 服務(wù)器返回?cái)?shù)據(jù)(response)的時(shí)間,超過拋出read timeout?

?????socketTimeout: 10000?

?????# 存活時(shí)間?

?????validateAfterInactivity: 10000

從yml中獲取參數(shù)(HttpPoolConfig.java)

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Configuration;

/**

* 用于聲明連接池的相關(guān)配置信息

*/@Configurationpublic classHttpPoolConfig{

? ? @Value("${httpclient.maxtotal}")? ? public Integer maxTotal;

? ? @Value("${httpclient.defaultMaxPerRoute}")? ? public Integer defaultMaxPerRoute;

? ? /**

? ? * 連接上服務(wù)器(握手成功)的時(shí)間削解,超出拋出connect timeout

? ? */? ? @Value("${httpclient.connectTimeout}")? ? public Integer connectTimeout;

? ? /**

? ? * 從連接池中獲取連接的超時(shí)時(shí)間富弦,超時(shí)間未拿到可用連接,會(huì)拋出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool

? ? */? ? @Value("${httpclient.connectionRequestTimeout}")? ? public Integer connectionRequestTimeout;

? ? /**

? ? * 服務(wù)器返回?cái)?shù)據(jù)(response)的時(shí)間氛驮,超過拋出read timeout

? ? */? ? @Value("${httpclient.socketTimeout}")? ? public Integer socketTimeout;

? ? @Value("${httpclient.validateAfterInactivity}")? ? public Integer validateAfterInactivity;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腕柜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矫废,更是在濱河造成了極大的恐慌盏缤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓖扑,死亡現(xiàn)場(chǎng)離奇詭異唉铜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)律杠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門潭流,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柜去,你說我怎么就攤上這事灰嫉。” “怎么了嗓奢?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵熬甫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蔓罚,道長(zhǎng),這世上最難降的妖魔是什么瞻颂? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任豺谈,我火速辦了婚禮,結(jié)果婚禮上贡这,老公的妹妹穿的比我還像新娘茬末。我一直安慰自己,他們只是感情好盖矫,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布丽惭。 她就那樣靜靜地躺著,像睡著了一般辈双。 火紅的嫁衣襯著肌膚如雪责掏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天湃望,我揣著相機(jī)與錄音换衬,去河邊找鬼痰驱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瞳浦,可吹牛的內(nèi)容都是我干的担映。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼叫潦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蝇完!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矗蕊,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤短蜕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拔妥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忿危,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年没龙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铺厨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硬纤,死狀恐怖解滓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筝家,我是刑警寧澤洼裤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站溪王,受9級(jí)特大地震影響腮鞍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莹菱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一移国、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧道伟,春花似錦迹缀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拘鞋,卻和暖如春砚蓬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盆色。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工怜械, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颅和,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓缕允,卻偏偏與公主長(zhǎng)得像峡扩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子障本,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容