Springboot調(diào)整接口響應(yīng)返回時長詳解(解決響應(yīng)超時問題)
配置Http會話超時
可以通過兩種方式為Spring Boot應(yīng)用程序配置HTTP會話超時。
application.properties中配置會話超時
最簡單的方法是在你的application.properties中加入?yún)?shù)server.servlet.session.timeout。比如說
server.servlet.session.timeout=60s
還要注意的是,Tomcat不允許你將超時時間設(shè)置得少于60秒。
以程序方式配置會話超時
假設(shè)我們想讓我們的HttpSession只持續(xù)兩分鐘。為了實現(xiàn)這一點,我們可以在我們的WebConfiguration類中添加一個EmbeddedServletContainerCustomizer Bean,內(nèi)容如下。
@Configuration
public 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);
};
}
在應(yīng)用程序啟動期間,Spring Boot自動配置檢測到EmbeddedServletContainerCustomizer,并調(diào)用customize(…)方法,傳遞對Servlet容器的引用。
配置接口訪問超時
SpringBoot設(shè)置接口訪問超時時間有兩種方式
一、配置文件方式
在配置文件application.properties中加了spring.mvc.async.request-timeout=120000,意思是設(shè)置超時時間為120000ms即120s
# [設(shè)置接口的超時時間] spring.mvc.async.request-timeout=120000
二、配置Config配置類
還有一種就是在config配置類中加入:
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(20000);
configurer.registerCallableInterceptors(timeoutInterceptor());
}
@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
return new TimeoutCallableProcessingInterceptor();
}
}
采用上面的兩種配置之一后,重新運行服務(wù),調(diào)用接口最大等待的響應(yīng)時間為上面設(shè)置的120s。
需要避免踩到的坑
如果按上述配置后,還是會出現(xiàn)超時情況,有可能是以下幾種技術(shù)的問題,需要對應(yīng)設(shè)置一下。
tomcat的設(shè)置
上文中是springboot開發(fā)環(huán)境,使用了內(nèi)置的tomcat。而在實際生產(chǎn)環(huán)境中一般用的是外置tomcat來部署(便于后續(xù)發(fā)布更新),需要在tomcat的配置文件server.xml中設(shè)置超時時間(默認20秒以下設(shè)置為120秒)。
<Connector port="8811" protocol="HTTP/1.1"
connectionTimeout="120000"
redirectPort="8443" />
Nginx的設(shè)置
如果服務(wù)端使用到Nginx做了反向代理轉(zhuǎn)發(fā)請求,就需要在Nginx的配置文件nginx.conf中設(shè)置超時時間,否則會返回“java.io.IOException: 你的主機中的軟件中止了一個已建立的連接”這樣的異常提示。
未設(shè)置時Nginx響應(yīng)時間默認60秒,這里我將http頭部的keepalive_timeout 、client_header_timeout 、client_body_timeout 、send_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; #連接超時時間,服務(wù)器將會在這個時間后關(guān)閉連接
send_timeout 120; #發(fā)送超時時間
client_header_timeout 120; #請求頭的超時時間
client_body_timeout 120; #請求體的讀超時時間
#gzip on;
.....
#業(yè)務(wù)系統(tǒng)的配置
server {
listen 9092;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8811/mywebsev/;
proxy_read_timeout 120; # 等候后端服務(wù)器響應(yīng)時間 秒
}
}
}
參考文章
springboot:實現(xiàn)異步響應(yīng)請求(解決前端請求超時的問題)
總結(jié)
到此這篇關(guān)于Springboot調(diào)整接口響應(yīng)返回時長(解決響應(yīng)超時問題)的文章就介紹到這了,更多相關(guān)Springboot調(diào)整接口響應(yīng)返回時長內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java的Jackson庫中復(fù)雜對象集合的幾種簡單轉(zhuǎn)換
本文主要介紹了Java的Jackson庫中復(fù)雜對象集合的幾種簡單轉(zhuǎn)換。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02
使用Mybatis如何實現(xiàn)刪除多個數(shù)據(jù)
這篇文章主要介紹了使用Mybatis如何實現(xiàn)刪除多個數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
關(guān)于文件上傳MultipartBody的使用方法
這篇文章主要介紹了關(guān)于文件上傳MultipartBody的使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java線程池的幾種實現(xiàn)方法和區(qū)別介紹實例詳解
本篇文章主要介紹了Java線程池的幾種實現(xiàn)方法和區(qū)別,需要的朋友可以參考2017-04-04
關(guān)于Mybatis動態(tài)sql中test的坑點總結(jié)
這篇文章主要介紹了關(guān)于Mybatis動態(tài)sql中test的坑點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

