最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Resttemplate中設(shè)置超時時長方式

 更新時間:2021年10月29日 10:28:45   作者:dbave  
這篇文章主要介紹了Resttemplate中設(shè)置超時時長方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Resttemplate 設(shè)置超時時長

為了滿足調(diào)用需求,需要在使用Resttemplate發(fā)送請求時,修改超時時長,網(wǎng)上給出了相關(guān)修改方法,代碼如下:

HttpComponentsClientHttpRequestFactory rf =
            ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
        rf.setConnectTimeout(30000);
        rf.setReadTimeout(30000);

但是在運行時報錯:

org.springframework.http.client.InterceptingClientHttpRequestFactory cannot be cast to org.springframework.http.client.HttpComponentsClientHttpRequestFactory

restTemplate.getRequestFactory()返回的類型無法轉(zhuǎn)換,通過搜索和調(diào)試發(fā)現(xiàn),在resttemplate中,必須在設(shè)置攔截器之前設(shè)置超時,因為在設(shè)置攔截器后無法設(shè)置超時,而我在設(shè)置中并沒有設(shè)置過攔截器,應(yīng)該是被默認構(gòu)造了

所以解決方法如下:

restTemplate.setInterceptors(null);
HttpComponentsClientHttpRequestFactory rf =
            ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
rf.setConnectTimeout(30000);
rf.setReadTimeout(30000);

在設(shè)置超時之前,先將攔截器置空,這樣就不會出現(xiàn)無法設(shè)置的問題,之后驗證通過。

查看resttemplate源碼后發(fā)現(xiàn),之所以會出現(xiàn)這樣的情況是因為在resttemplate的源碼中,有這么一段代碼:

/**
 * Return the request interceptor that this accessor uses.
 */
public List<ClientHttpRequestInterceptor> getInterceptors() {
   return interceptors;
}
@Override
    public ClientHttpRequestFactory getRequestFactory() {
        ClientHttpRequestFactory delegate = super.getRequestFactory();
        if (!CollectionUtils.isEmpty(getInterceptors())) {
            return new InterceptingClientHttpRequestFactory(delegate, getInterceptors());
        }
        else {
            return delegate;
        }
    }

可以看到,在getRequestFactory()函數(shù)中,本來應(yīng)該是返回ClientHttpRequestFactory類型的,但是它會先校驗一次是否含有interceptors攔截器,如果攔截器非空,則會返回包含攔截器的InterceptingClientHttpRequestFactory,這樣是無法轉(zhuǎn)換為HttpComponentsClientHttpRequestFactory類型的,因此在前面處理的時候?qū)r截器置空,這樣就可以返回不含攔截器的所需對象。

RestTemplate 設(shè)置超時時間注意點

1、保證系統(tǒng)中只有一個RestTemplate的配置;不然可能與你的預期不一致。

2、永遠不要太相信自己寫的代碼;多打印日志才能真正知道調(diào)用時間;

long s = System.currentTimeMillis();
        try {
            responseEntity = restTemplate.exchange();
        } catch (Exception e) {
            long costTime = System.currentTimeMillis()-s;
            log.error("調(diào)用**服務(wù)異常,花費時間:{},錯誤:{}",costTime, e.getMessage(), e);
        }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

翁源县| 宁都县| 曲靖市| 横峰县| 汉阴县| 柘城县| 景东| 长沙县| 南木林县| 象山县| 南平市| 云和县| 贵溪市| 奉贤区| 凌海市| 静乐县| 石林| 嘉荫县| 山东省| 清水河县| 将乐县| 多伦县| 岳阳市| 朔州市| 乐平市| 察雅县| 巴林右旗| 桃源县| 和政县| 长沙县| 双柏县| 高尔夫| 南澳县| 措美县| 都兰县| 新野县| 怀柔区| 香港| 南丹县| 朝阳区| 聂拉木县|