专业定制网站设计,wordpress打开乱码,深圳建设工程交易服务,南京华夏天成建设有限公司网站前言
如果在网上搜索#xff0c;SpringBoot接口超时时间#xff0c;很多人会说是配置#xff1a;spring.mvc.async.request-timeout#xff0c;这个回答对也不对。主要是这个问题问的就不清不楚#xff0c;所以这个答案也就不清不楚了。
结论
同步接口没有超时时间一说…前言
如果在网上搜索SpringBoot接口超时时间很多人会说是配置spring.mvc.async.request-timeout这个回答对也不对。主要是这个问题问的就不清不楚所以这个答案也就不清不楚了。
结论
同步接口没有超时时间一说
spring.mvc.async.request-timeout配置的是异步接口的超时时间这里的超时指的是从主请求处理线程退出后开始到再次调度请求以进一步处理并发生成的结果时结束。
接口超时时间
接口超时时间——这句话要分为两部分来分析第一什么接口第二超时时间是指的什么时间
首先来看第一个什么接口在servlet3.0之后有同步和异步之分所以这里的接口没有说明是同步接口还是异步接口。不过一般来说大多数人用的都是同步接口。
而第二个超时时间姑且认为是我的业务代码执行的时间。
因此现在来看这个问题如果说是一个异步接口那么spring.mvc.async.request-timeout的配置值是有效的。并且这个指定的是异步请求处理超时之前的时间量以毫秒为单位。在 Servlet 3 中超时从主请求处理线程退出后开始到再次调度请求以进一步处理并发生成的结果时结束。 请看以下代码
GetMapping(/testCallAble)
public CallableString testCallAble() throws InterruptedException {Thread.sleep(t1);return () - {Thread.sleep(t2);return hello;};
}这是一个异步接口spring.mvc.async.request-timeout5S即异步接口5秒超时当
t110000即10st21000即1s时接口可正常返回t11000即1st210000即10s时接口会报错AsyncRequestTimeoutException
结合这两个结果再来理解这配置spring.mvc.async.request-timeout的含义就清楚了。
但如果不是异步接口是一个同步的接口呢这个配置对同步接口不生效你看配置中的async也知道它说的是异步。其实对于同步接口来说没有超时时间一说即服务端没法对接口进行超时时间配置其他框架或者个人自行扩展实现的那就另当别论了。再说的具体一点A应用调用B应用那么所谓的超时都是在客户端配置的即A应用配置的而B应用无需设置自己业务代码的超时时间。当然有时A和B之间可能会有一个网关网关这里也可以配置超时时间那么对于A而言就像是B配置了超时时间但这个对于B而言网关也是一个客户端了所以客户端设置超时时间是可以的。
我个人理解在同步接口中一个代码的执行时间是可控的——一个接口与之相关的代码编译的指令有多少这个可以确定而唯一不确定的是这个接口调用其他的接口、或者链接数据库之类的但这个时候它就变成了客户端可以设置超时时间了有了超时时间那么这些不确定的时间又变成可确定的了。既然一个可确定时长的代码又何必再整一个配置来限制它呢认真想想就会觉得确实如此。
而异步接口却不一样它会脱离主线程tomcat的工作线程等脱离到再次被执行响应的这个时间是不确定的所以有必要给一个时间来限制它。认真想想~~~
异步接口超时时间默认值
看文档这个异步接口超时时间有这么一个说明如果未设置此值则使用基础实现的默认超时。这里这个超时时间默认是30秒可以从org.apache.catalina.core.AsyncContextImpl中的timeout可以看到如果配置为0或者-1则表示永不超时
另外这个配置是有优先级的优先级高的会覆盖低优先级的
具体的接口WebAsyncTask中设置的超时时间配置的时间优先级最高其次是WebMvcConfigurer.configureAsyncSupport中AsyncSupportConfigurer设置的DefaultTimeout其次是配置文件中配置的spring.mvc.async.request-timeout最后才是默认的
server.tomcat.connection-timeout
server.tomcat.connection-timeout配置的作用是指定了客户端与服务器之间的连接超时时间。当客户端连接到Tomcat服务器时如果在指定的时间内没有完成与服务器的握手连接将被视为超时并关闭。注意是建立连接需要的时间,并非连接处理的时间。