在Spring Boot管理日志中反复出现AsyncRequestTimeoutException



我目前正在我的本地机器上运行Spring Boot Admin用于测试目的,并且我不断地得到以下错误。应用程序本身似乎工作良好,但我的日志中充满了这些错误。我不知道为什么……

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

我也有类似的错误。在您的应用程序中尝试此属性。yml

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

或者没有弹簧启动,添加

    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        long timeout = 5 * 60 * 1000;// for example 5 minutes
        WebMvcConfigurer.super.configureAsyncSupport(configurer);
        configurer.setDefaultTimeout(timeout);
    }

到实现webmvcconfigiler的配置类

可以为特定订阅配置超时,而不是在应用程序级别配置超时。

    @GetMapping(value = "/subscription")
    public SseEmitter subscription() {
        SseEmitter emitter = new SseEmitter((long) (60000 * 5));
        return emitter;
    }

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

使用ComplatebleFuture<Any>作为@RestController函数的返回类型,使用Tomcat作为后台容器的情况下。然后需要将catalina Connector定制器注册到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不行

相关内容

  • 没有找到相关文章

最新更新