當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...
生活随笔
收集整理的這篇文章主要介紹了
httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【SpringBoot WEB 系列】RestTemplate 之超時設(shè)置
一般來講我們訪問外部資源時,需要做一個保護,比如最常見的添加一個超時設(shè)置,避免一直被阻塞,RestTemplate 可以通過SimpleClientHttpRequestFactory來處理超時設(shè)置
I. RestTemplate 超時設(shè)置
博文測試項目完全基于【W(wǎng)EB 系列】RestTemplate 基礎(chǔ)用法小結(jié)的項目環(huán)境,建議配合查看
基本環(huán)境:IDEA + maven + SpringBoot 2.2.1.RELEASE
1. 超時端點
添加一個超時模擬的端點如下
private?String?getHeaders(HttpServletRequest?request)?{????Enumeration?headerNames?=?request.getHeaderNames();
????String?name;
????JSONObject?headers?=?new?JSONObject();while?(headerNames.hasMoreElements())?{
????????name?=?headerNames.nextElement();
????????headers.put(name,?request.getHeader(name));
????}return?headers.toJSONString();
}private?String?getParams(HttpServletRequest?request)?{return?JSONObject.toJSONString(request.getParameterMap());
}private?String?getCookies(HttpServletRequest?request)?{
????Cookie[]?cookies?=?request.getCookies();if?(cookies?==?null?||?cookies.length?==?0)?{return?"";
????}
????JSONObject?ck?=?new?JSONObject();for?(Cookie?cookie?:?cookies)?{
????????ck.put(cookie.getName(),?cookie.getValue());
????}return?ck.toJSONString();
}private?String?buildResult(HttpServletRequest?request)?{return?buildResult(request,?null);
}private?String?buildResult(HttpServletRequest?request,?Object?obj)?{
????String?params?=?getParams(request);
????String?headers?=?getHeaders(request);
????String?cookies?=?getCookies(request);if?(obj?!=?null)?{
????????params?+=?"?|?"?+?obj;
????}return?"params:?"?+?params?+?"\nheaders:?"?+?headers?+?"\ncookies:?"?+?cookies;
}@GetMapping(path?=?"timeout")public?String?timeOut(HttpServletRequest?request)?throws?InterruptedException?{
????Thread.sleep(60_000L);return?buildResult(request);
}
2. 超時設(shè)置
主要是通過設(shè)置SimpleClientHttpRequestFactory來設(shè)置超時
/**?*?設(shè)置超時時間
?*/
public?void?timeOut()?{
????RestTemplate?restTemplate?=?new?RestTemplate();
????SimpleClientHttpRequestFactory?requestFactory?=?new?SimpleClientHttpRequestFactory();
????requestFactory.setConnectTimeout(1000);
????requestFactory.setReadTimeout(1000);
????restTemplate.setRequestFactory(requestFactory);
????long?start?=?System.currentTimeMillis();
????try?{
????????log.info("timeOut?start:?{}",?start);
????????HttpEntity?response?=
????????????????restTemplate.getForEntity("http://127.0.0.1:8080/timeout?name=一灰灰&age=20",?String.class);
????????log.info("timeOut?cost:{}?response:?{}",?System.currentTimeMillis()?-?start,?response);
????}?catch?(Exception?e)?{
????????log.info("timeOut?cost:{}?exception:?{}",?System.currentTimeMillis()?-?start,?e.getMessage());
????}
}
輸出如下:
(timeOut?start:?1593420406204(timeOut?cost:1014?exception:?I/O?error?on?GET?request?for?"http://127.0.0.1:8080/timeout":?Read?timed?out;?nested?exception?is?java.net.SocketTimeoutException:?Read?timed?out
II. 其他
1. 源碼&系列博文
博文
- 【W(wǎng)EB 系列】RestTemplate 之中文亂碼問題 fix
- 【W(wǎng)EB 系列】RestTemplate 之自定義請求頭
- 【W(wǎng)EB 系列】RestTemplate 基礎(chǔ)用法小結(jié)
源碼
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 源碼: https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/221-web-resttemplate
1. 一灰灰 Blog
盡信書則不如,以上內(nèi)容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發(fā)現(xiàn) bug 或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的個人博客,記錄所有學(xué)習(xí)和工作中的博文,歡迎大家前去逛逛
- 一灰灰 Blog 個人博客 https://blog.hhui.top
- 一灰灰 Blog-Spring 專題博客 http://spring.hhui.top
總結(jié)
以上是生活随笔為你收集整理的httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bat贪吃蛇游戏代码_C语言写个贪吃蛇游
- 下一篇: python webdriver点击指令