一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Resttemplate中設置超時時長方式

Resttemplate中設置超時時長方式

2022-03-06 01:01dbave Java教程

這篇文章主要介紹了Resttemplate中設置超時時長方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Resttemplate 設置超時時長

為了滿足調用需求,需要在使用Resttemplate發送請求時,修改超時時長,網上給出了相關修改方法,代碼如下:

?
1
2
3
4
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()返回的類型無法轉換,通過搜索和調試發現,在resttemplate中,必須在設置攔截器之前設置超時,因為在設置攔截器后無法設置超時,而我在設置中并沒有設置過攔截器,應該是被默認構造了

所以解決方法如下:

?
1
2
3
4
5
restTemplate.setInterceptors(null);
HttpComponentsClientHttpRequestFactory rf =
            ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
rf.setConnectTimeout(30000);
rf.setReadTimeout(30000);

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * 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()函數中,本來應該是返回ClientHttpRequestFactory類型的,但是它會先校驗一次是否含有interceptors攔截器,如果攔截器非空,則會返回包含攔截器的InterceptingClientHttpRequestFactory,這樣是無法轉換為HttpComponentsClientHttpRequestFactory類型的,因此在前面處理的時候將攔截器置空,這樣就可以返回不含攔截器的所需對象。

RestTemplate 設置超時時間注意點

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

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

?
1
2
3
4
5
6
7
long s = System.currentTimeMillis();
        try {
            responseEntity = restTemplate.exchange();
        } catch (Exception e) {
            long costTime = System.currentTimeMillis()-s;
            log.error("調用**服務異常,花費時間:{},錯誤:{}",costTime, e.getMessage(), e);
        }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/dbave/p/9381097.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: a毛片免费全部在线播放毛 a级在线看 | 2020韩国r级理论片在线观看 | 欧美性色黄大片四虎影视 | 美女又爽又黄免费 | 亚洲免费视频一区二区三区 | 国产精品亚洲一区二区 | 免费观看一级欧美在线视频 | 高清女主播一区二区三区 | 全色黄大色黄大片爽一次 | 师尊被各种play打屁股 | 亚洲欧美在线观看一区二区 | 欧美一级片在线看 | 猫咪社区免费资源在线观看 | 九九99热久久999精品 | 18性夜影院午夜寂寞影院免费 | 视频二区 素人 欧美 日韩 | 91视频www| 日产精品卡一卡2卡三卡乱码工厂 | 国色天香视频完整版 | 星星动漫在线观看无删减 | 大胆暴露亚洲美女xxxx | 欧美日韩一区二区综合在线视频 | 幻女free性摘花第一次 | 亚洲欧洲日产国码 最新 | 日韩在线视频免费不卡一区 | 女班长的放荡日记高h | 美女班主任下面好爽好湿好紧 | 9999热视频 | 欧美黑人性 | www.羞羞答答 | www.四虎.com| 韩国最新理论三级在线观看 | 久久机热视频 这里只有精品首页 | 国产a一级毛片午夜剧院 | 91久久碰国产| 成年性午夜免费视频网站不卡 | 金牛网155755水心论坛黄大父母 | 欧美极品brazzers 高清 | 国产精品调教 | 国产香蕉国产精品偷在线观看 | 久久久久久久电影 |