iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Springboot调整接口响应返回时长(解决响应超时问题)
  • 889
分享到

Springboot调整接口响应返回时长(解决响应超时问题)

springbootjavaservlet 2023-10-02 16:10:39 889人浏览 泡泡鱼
摘要

SpringBoot调整接口/会话响应返回时长(解决响应超时问题) 配置Http会话超时 可以通过两种方式为Spring Boot应用程序配置HTTP会话超时。 application.propert

SpringBoot调整接口/会话响应返回时长(解决响应超时问题)

配置Http会话超时

可以通过两种方式为Spring Boot应用程序配置HTTP会话超时

application.properties中配置会话超时

最简单的方法是在你的application.properties中加入参数server.servlet.session.timeout。比如说

server.servlet.session.timeout=60s

还要注意的是,Tomcat不允许你将超时时间设置得少于60秒。

以程序方式配置会话超时

假设我们想让我们的httpsession只持续两分钟。为了实现这一点,我们可以在我们的WEBConfiguration类中添加一个EmbeddedServletContainerCustomizer Bean,内容如下。

@Configurationpublic class WebConfiguration {  @Bean  public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() {    return new EmbeddedServletContainerCustomizer() {      @Override      public void customize(ConfigurableEmbeddedServletContainer container) {        container.setSessionTimeout(2, TimeUnit.MINUTES);      }    };  }}

这里再给出一个使用Java 8和lambda表达式的捷径写法。

public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() {    return (ConfigurableEmbeddedServletContainer container) -> {      container.setSessionTimeout(2, TimeUnit.MINUTES);    };  }

在应用程序启动期间,spring Boot自动配置检测到EmbeddedServletContainerCustomizer,并调用customize(…)方法,传递对Servlet容器的引用。

配置接口访问超时

SpringBoot设置接口访问超时时间有两种方式

一、配置文件方式

在配置文件application.properties中加了spring.mvc.async.request-timeout=120000,意思是设置超时时间为120000ms即120s

# [设置接口的超时时间]spring.mvc.async.request-timeout=120000

二、配置Config配置类

还有一种就是在config配置类中加入:

public class WebMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void configureAsyncSupport(final AsyncSupportConfigurer configurer) {configurer.setDefaultTimeout(20000);configurer.reGISterCallableInterceptors(timeoutInterceptor());}@Beanpublic TimeoutCallableProcessingInterceptor timeoutInterceptor() {return new TimeoutCallableProcessingInterceptor();}}

采用上面的两种配置之一后,重新运行服务,调用接口最大等待的响应时间为上面设置的120s。

需要避免踩到的坑

如果按上述配置后,还是会出现超时情况,有可能是以下几种技术的问题,需要对应设置一下。

tomcat的设置

上文中是springboot开发环境,使用了内置的tomcat。而在实际生产环境中一般用的是外置tomcat来部署(便于后续发布更新),需要在tomcat的配置文件server.xml中设置超时时间(默认20秒以下设置为120秒)。

    <Connector port="8811" protocol="HTTP/1.1"               connectionTimeout="120000"               redirectPort="8443" />
Nginx的设置

如果服务端使用到Nginx做了反向代理转发请求,就需要在Nginx的配置文件nginx.conf中设置超时时间,否则会返回“java.io.IOException: 你的主机中的软件中止了一个已建立的连接”这样的异常提示。

未设置时Nginx响应时间默认60秒,这里我将http头部的keepalive_timeoutclient_header_timeoutclient_body_timeoutsend_timeout 、以及server代码块中的proxy_read_timeout 均配置为120秒。

http {    include       mime.types;    default_type  application/octet-stream;    client_max_body_size 100m;    #log_fORMat  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';     #access_log  logs/access.log  main;     sendfile        on;    #tcp_nopush     on;     keepalive_timeout  120; #连接超时时间,服务器将会在这个时间后关闭连接    send_timeout 120;    #发送超时时间    client_header_timeout 120;    #请求头的超时时间    client_body_timeout 120;    #请求体的读超时时间    #gzip  on; .....     #业务系统的配置    server {        listen       9092;        server_name  localhost;    location / {             proxy_pass http://127.0.0.1:8811/mywebsev/;         proxy_read_timeout 120;  # 等候后端服务器响应时间 秒            }    }  }

参考文章

springboot:实现异步响应请求(解决前端请求超时的问题)

来源地址:https://blog.csdn.net/Urbanears/article/details/127539459

--结束END--

本文标题: Springboot调整接口响应返回时长(解决响应超时问题)

本文链接: https://www.lsjlt.com/news/422728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作