springboot设置请求超时
首先超时不只一种,是接口超时,还是restTemplate超时。
接口超时: 别人访问该项目
restTemplate(或httpClient)超时: 该项目请求其他地址
restTemplate超时设置
默认的超时设置
默认是没有超时限制的,见SimpleClientHttpRequestFactory 类的
private int connectTimeout = -1; // -1 表示不超时
private int readTimeout = -1; // -1 表示不超时
代码设置超时时间
Application中或者@Configuration注解的类中配置:
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {return new RestTemplate(factory);
}@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setConnectTimeout(10000); // 连接到主机 超时时间factory.setReadTimeout(10000); // 从主机读取数据 超时时间return factory;
}
配置文件设置超时时间
yml写法:
rest:template:conn:connect-timeout: 3000read-timeout: 3000
properties写法:
#restTemplate配置
rest.connection.connection-request-timeout=30000
rest.connection.connect-timeout=30000
rest.connection.read-timeout=30000
请求例子
配置了超时之后,启动项目,通过浏览器请求controller,发现无效,这是为什么呢?
当然无效。因为超时设置的从本项目请求其他项目。
controller中加个请求,通过restTemplate访问本项目中的延迟方法,发现超时有效了。
@ResponseBody
@RequestMapping("/request")
public String request(){String url ="http://localhost:8080/timeout/demo1";MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();params.add("username", "用户名");params.add("password", "123456");restTemplate.postForEntity(url,params,String.class);return "request success";
}
httpClient 1.3版本之前 的配置
@Configuration
public class RestTemplateConfiguration {@Beanpublic RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();httpRequestFactory.setConnectionRequestTimeout(3 * 1000); // 从链接池获取连接的超时时间httpRequestFactory.setConnectTimeout(3 * 1000); // 连接到主机超时httpRequestFactory.setReadTimeout(3 * 1000); // 从主机读取数据超时return new RestTemplate(httpRequestFactory);}
}
httpClient 1.4版本之后的配置
@Configuration
public class AppConfig
{@Beanpublic RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){return restTemplateBuilder.setConnectTimeout(3000).setReadTimeout(3000).build();}
}
接口超时时间
properties配置:
spring.mvc.async.request-timeout=20000
代码配置:
public class WebMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void configureAsyncSupport(final AsyncSupportConfigurer configurer) {configurer.setDefaultTimeout(20000);configurer.registerCallableInterceptors(timeoutInterceptor());}@Beanpublic TimeoutCallableProcessingInterceptor timeoutInterceptor() {return new TimeoutCallableProcessingInterceptor();}
}
超时请求类代码(模拟超时)
别人访问该服务:
@RequestMapping(value="/customSleep",name="customSleep")
public String customSleep(int n) {try {logger.info("");Thread.sleep(n*1000);} catch (InterruptedException e) {e.printStackTrace();return "InterruptedException";}return "success";
}
其他
linux超过21秒就报超时
看日志,请求是在23-25秒之间。用postman是可以返回的,项目访问却会报超时。
这是因为linux默认请求超时时间21秒,会重试n次。
linux执行以下命令,设置下重试次数:
vim /etc/sysctl.conf # 编辑
net.ipv4.tcp_syn_retries = 6 # 次数是6 表示6*21 大约127秒
sysctl -p /etc/sysctl.conf # 加载设置(-p后如果不跟文件名,默认从 /etc/sysctl.conf文件加载)
nginx设置超时时间
在location中设置即可:
proxy_connect_timeout 60; # 连接到主机超时时间
proxy_read_timeout 300; # 从主机读取数据超时时间
springboot设置请求超时相关推荐
- 微信小程序设置请求超时wx.request等,简单易懂!
微信小程序设置请求超时wx.request等 一.用到的方法: 个人理解,比较粗糙 看不懂可以百度一下具体用法 new Promise:new了一个函数或者方法,可以被Promise.race等方法调 ...
- Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo
1.导入OKhttp依赖 compile 'com.squareup.okhttp3:okhttp:3.4.1' 2.创建请求工具类 三个工具类 /*** 作者:created by meixi* 邮 ...
- springboot设置session超时和session监听
2.0版本以下设置session超时时间 1. springboot 2.0版本以下配置session超时 1.1 application.properties配置文件: spring.sessio ...
- fetch设置请求超时
常规封装 fetch // 封装fetch let POST = function(url, params) {const URLS = baseURL + url;return fetch(URLS ...
- HttpClient设置请求超时
前言 最近,我无疑间看到同事提交到git上的httpclient调用第三方服务设置超时代码,发现有趣的一件事.项目中引用的httpclient版本是4.4.5版本,结果同事为了设置超时,在项目的pom ...
- jquery $.get和$.post设置请求超时error处理
.get和.get和.get和.post设置 //设置全局超时 $.ajaxSettings.timeout='3000'; $.post(url,{"sessionId":ses ...
- Linux下CURL设置请求超时时间
使用CURL时,有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间. 连接超时时间用--connect-timeout参数来指定,数据传输的最大允许时间用-m参数来指定. 例如: cu ...
- http 请求 超时时间设置
HttpParams params = new BasicHttpParams(); //设置连接超时时间 Integer CONNECTION_TIMEOUT = 2 * 1000; //设置请求超 ...
- ASP.NET Core MVC请求超时设置解决方案
设置请求超时解决方案 当进行数据导入时,若导入数据比较大时此时在ASP.NET Core MVC会出现502 bad gateway请求超时情况(目前对于版本1.1有效,2.0未知),此时我们需要在项 ...
最新文章
- 点云数据格式 数据集笔记
- 2017-2018-2 20155327 《信息安全系统设计基础》第2周学习总结
- 概率论 第三章 多维随机变量及其分布
- 自己架设手机网游_起来,不愿做网游的奴隶!
- boost::mp11::mp_count相关用法的测试程序
- vue render函数
- 使用@Autowired注解警告Field injection is not recommended
- idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
- 关于css的一切(updating...)
- KDE桌面没有wifi的解决方案
- OpenTSDB的读写API
- Structs的执行流程
- SQLMAP使用教程(一)
- 使用python turtle库绘制一个三角形_python ——turtle画三角形
- 第三方支付如何帮助在线教育打通支付
- java 数据挖掘包,什么是Java数据挖掘,JDM?
- Pytest测试框架的基本使用和allure测试报告
- 手把手教你Photoshop蒙版的使用(二)
- 网易云评论 爬虫 java_网易云音乐资源爬取(登录+评论)
- Kafka集群的安全认证机构 SASL_SCRAM
热门文章
- 华为eSight网络监控平台
- zz:如何更改列表项前的New标记的天数设置(days-to-show-new-icon ) from Jianyi
- 阿里云云效荣获首个可信云DevOps解决方案国家级标准先进级认证
- python多标签分类_解决多标签分类问题(包括案例研究)
- k8s技术预研7--深入掌握Kubernetes Pod
- 【sqli-labs】 对于less34 less36的宽字节注入的一点深入
- Spark之cache ,persist ,checkpoint ,广播变量及其案例 : 根据IP地址(浏览器访问日志获取) / 经度纬度定位地理位置案例(7)
- 忘记RAR、ZIP压缩包密码?尝试这3个绝妙解决办法!
- Capella产品格式与产品定义
- 李开复新书《AI·未来》