Java 在Spring引导管理日志中重复出现AsyncRequestTimeoutException

Java 在Spring引导管理日志中重复出现AsyncRequestTimeoutException,java,spring,spring-boot,spring-boot-admin,Java,Spring,Spring Boot,Spring Boot Admin,我目前正在本地机器上运行SpringBootAdmin以进行测试,并不断收到以下错误。应用程序本身似乎工作正常,但我的日志中充满了这些错误。我不知道为什么 org.springframework.web.context.request.async.AsyncRequestTimeoutException:null 在org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.ha

我目前正在本地机器上运行SpringBootAdmin以进行测试,并不断收到以下错误。应用程序本身似乎工作正常,但我的日志中充满了这些错误。我不知道为什么

org.springframework.web.context.request.async.AsyncRequestTimeoutException:null
在org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.handleTimeout(TimeoutDeferredResultProcessingInterceptor.java:42)~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
在org.springframework.web.context.request.async.DeferredResultInterceptorChain.triggerAfterTimeout(DeferredResultInterceptorChain.java:75)~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
在org.springframework.web.context.request.async.WebAsyncManager$5.run(WebAsyncManager.java:392)~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
在org.springframework.web.context.request.async.StandardServletAsyncWebRequest.onTimeout(StandardServletAsyncWebRequest.java:143)~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
在org.apache.catalina.core.AsyncListenerWrapper.firontimeout(AsyncListenerWrapper.java:44)~[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.catalina.core.AsyncContextImpl.timeout(AsyncContextImpl.java:131)~[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:157)~[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:228)[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)[tomcat-embed-core-8.5.5.jar!/:8.5.5]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.040]
在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[na:1.8.040]
在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)[tomcat-embed-core-8.5.5.jar!/:8.5.5]
在java.lang.Thread.run(Thread.java:745)[na:1.8.0_40]

我也有类似的错误。请在application.yml中尝试此属性

spring:
  mvc:
    async:
      request-timeout: -1  

或者,如果没有弹簧护套,则添加

@覆盖
public void configureAsyncSupport(AsyncSupportConfigurer configurer){
长超时=5*60*1000;//例如5分钟
webmvcconfiguer.super.configureAsyncSupport(configurer);
configurer.setDefaultTimeout(超时);
}

对于实现WebMVCConfiguer的配置类,您可以为特定订阅配置超时,而不是在应用程序级别配置超时

@GetMapping(value=“/subscription”)
公共订阅(){
SSE发射器=新的SSE发射器((长)(60000*5));
返回发射器;
}

所以在上面的摘录中,我给了5分钟的时间来进行这个特殊的连接。其余连接仍将使用服务器默认超时。

如果使用
@RestController
作为
@RestController
函数的返回类型,并使用Tomcat作为备份容器,则需要将catalina连接器自定义程序注册到spring上下文中,这将调整异步连接超时。因为
org.apache.catalina.connector.connector
有自己的属性
protected long asyncTimeout=30000将终止异步请求的处理

@Configuration
class TomcatAsyncConfig {
    @Bean
    fun asyncTimeoutCustomize(): TomcatConnectorCustomizer =
        TomcatConnectorCustomizer { connector -> connector.asyncTimeout = 180000 }
}
设定值
spring.mvc.async.request-timeout:-1

server.tomcat.connection timeout
不行。

此服务器出现问题:。这里是潜在的春季问题:谢谢你提出这个问题。我想它会在下一个版本中得到修复。嗨@VinodYadav,欢迎来到Stack Overflow。我已经编辑了你的答案,将你的代码包装在一个代码标签中,这样更容易阅读。谢谢@Vinod,这非常有效。一个repo示例说明了这个问题[]删除属性后,AsyncRequestTimeoutException重新出现。请注意将异步超时设置为-1,其中一些类型的请求将保留在线程/套接字上,如果发出的请求数量足够大,则可能会导致资源不足。您还可以将超时声明为-1以取消超时