首先超时不只一种,是接口超时,还是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设置请求超时相关推荐

  1. 微信小程序设置请求超时wx.request等,简单易懂!

    微信小程序设置请求超时wx.request等 一.用到的方法: 个人理解,比较粗糙 看不懂可以百度一下具体用法 new Promise:new了一个函数或者方法,可以被Promise.race等方法调 ...

  2. Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo

    1.导入OKhttp依赖 compile 'com.squareup.okhttp3:okhttp:3.4.1' 2.创建请求工具类 三个工具类 /*** 作者:created by meixi* 邮 ...

  3. springboot设置session超时和session监听

    2.0版本以下设置session超时时间 1.  springboot 2.0版本以下配置session超时 1.1 application.properties配置文件: spring.sessio ...

  4. fetch设置请求超时

    常规封装 fetch // 封装fetch let POST = function(url, params) {const URLS = baseURL + url;return fetch(URLS ...

  5. HttpClient设置请求超时

    前言 最近,我无疑间看到同事提交到git上的httpclient调用第三方服务设置超时代码,发现有趣的一件事.项目中引用的httpclient版本是4.4.5版本,结果同事为了设置超时,在项目的pom ...

  6. jquery $.get和$.post设置请求超时error处理

    .get和.get和.get和.post设置 //设置全局超时 $.ajaxSettings.timeout='3000'; $.post(url,{"sessionId":ses ...

  7. Linux下CURL设置请求超时时间

    使用CURL时,有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间. 连接超时时间用--connect-timeout参数来指定,数据传输的最大允许时间用-m参数来指定. 例如: cu ...

  8. http 请求 超时时间设置

    HttpParams params = new BasicHttpParams(); //设置连接超时时间 Integer CONNECTION_TIMEOUT = 2 * 1000; //设置请求超 ...

  9. ASP.NET Core MVC请求超时设置解决方案

    设置请求超时解决方案 当进行数据导入时,若导入数据比较大时此时在ASP.NET Core MVC会出现502 bad gateway请求超时情况(目前对于版本1.1有效,2.0未知),此时我们需要在项 ...

最新文章

  1. 点云数据格式 数据集笔记
  2. 2017-2018-2 20155327 《信息安全系统设计基础》第2周学习总结
  3. 概率论 第三章 多维随机变量及其分布
  4. 自己架设手机网游_起来,不愿做网游的奴隶!
  5. boost::mp11::mp_count相关用法的测试程序
  6. vue render函数
  7. 使用@Autowired注解警告Field injection is not recommended
  8. idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
  9. 关于css的一切(updating...)
  10. KDE桌面没有wifi的解决方案
  11. OpenTSDB的读写API
  12. Structs的执行流程
  13. SQLMAP使用教程(一)
  14. 使用python turtle库绘制一个三角形_python ——turtle画三角形
  15. 第三方支付如何帮助在线教育打通支付
  16. java 数据挖掘包,什么是Java数据挖掘,JDM?
  17. Pytest测试框架的基本使用和allure测试报告
  18. 手把手教你Photoshop蒙版的使用(二)
  19. 网易云评论 爬虫 java_网易云音乐资源爬取(登录+评论)
  20. Kafka集群的安全认证机构 SASL_SCRAM

热门文章

  1. 华为eSight网络监控平台
  2. zz:如何更改列表项前的New标记的天数设置(days-to-show-new-icon ) from Jianyi
  3. 阿里云云效荣获首个可信云DevOps解决方案国家级标准先进级认证
  4. python多标签分类_解决多标签分类问题(包括案例研究)
  5. k8s技术预研7--深入掌握Kubernetes Pod
  6. 【sqli-labs】 对于less34 less36的宽字节注入的一点深入
  7. Spark之cache ,persist ,checkpoint ,广播变量及其案例 : 根据IP地址(浏览器访问日志获取) / 经度纬度定位地理位置案例(7)
  8. 忘记RAR、ZIP压缩包密码?尝试这3个绝妙解决办法!
  9. Capella产品格式与产品定义
  10. 李开复新书《AI·未来》