Spring 引导管理日志中重复出现 AsyncRequestTimeoutException
Recurring AsyncRequestTimeoutException in Spring Boot Admin log
我目前 运行 Spring 为了测试目的在我的本地机器上启动管理,我不断收到以下错误。应用程序本身似乎运行良好,但我的日志中充满了这些错误。我不确定为什么...
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.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]
我也有类似的错误。在你 application.yml
中试试这个 属性
spring:
mvc:
async:
request-timeout: -1
或者没有 spring 引导,添加
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
long timeout = 5 * 60 * 1000;// for example 5 minutes
WebMvcConfigurer.super.configureAsyncSupport(configurer);
configurer.setDefaultTimeout(timeout);
}
到实现WebMvcConfigurer
的配置class
您可以为特定订阅配置超时,而不是在应用程序级别配置超时。
@GetMapping(value = "/subscription")
public SseEmitter subscription() {
SseEmitter emitter = new SseEmitter((long) (60000 * 5));
return emitter;
}
所以在上面的摘录中,我为这个特定的连接留了 5 分钟的时间。其余连接仍将使用服务器默认超时。
如果使用 ComplatebleFuture<Any>
作为 return 类型的 @RestController
函数并使用 Tomcat 作为支持 container.Then 则需要将 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
不行。
我目前 运行 Spring 为了测试目的在我的本地机器上启动管理,我不断收到以下错误。应用程序本身似乎运行良好,但我的日志中充满了这些错误。我不确定为什么...
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.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]
我也有类似的错误。在你 application.yml
中试试这个 属性spring:
mvc:
async:
request-timeout: -1
或者没有 spring 引导,添加
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
long timeout = 5 * 60 * 1000;// for example 5 minutes
WebMvcConfigurer.super.configureAsyncSupport(configurer);
configurer.setDefaultTimeout(timeout);
}
到实现WebMvcConfigurer
的配置class您可以为特定订阅配置超时,而不是在应用程序级别配置超时。
@GetMapping(value = "/subscription")
public SseEmitter subscription() {
SseEmitter emitter = new SseEmitter((long) (60000 * 5));
return emitter;
}
所以在上面的摘录中,我为这个特定的连接留了 5 分钟的时间。其余连接仍将使用服务器默认超时。
如果使用 ComplatebleFuture<Any>
作为 return 类型的 @RestController
函数并使用 Tomcat 作为支持 container.Then 则需要将 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
不行。