我创建了一个Spring Boot Web应用程序,并将其war部署到Tomcat容器中。
该应用程序使用异步连接连接到mongoDB
。为此,我使用了mongodb-driver-async
库。
在启动时一切正常。但是随着负载的增加,DB连接会显示以下异常:
org.springframework.web.context.request.async.AsyncRequestTimeoutException: null
at org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.handleTimeout(TimeoutDeferredResultProcessingInterceptor.java:42)
at org.springframework.web.context.request.async.DeferredResultInterceptorChain.triggerAfterTimeout(DeferredResultInterceptorChain.java:75)
at org.springframework.web.context.request.async.WebAsyncManager$5.run(WebAsyncManager.java:392)
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest.onTimeout(StandardServletAsyncWebRequest.java:143)
at org.apache.catalina.core.AsyncListenerWrapper.fireOnTimeout(AsyncListenerWrapper.java:44)
at org.apache.catalina.core.AsyncContextImpl.timeout(AsyncContextImpl.java:131)
at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:157)
我正在使用以下软件版本:
- Spring Boot -> 1.5.4.RELEASE
- Tomcat (已安装为独立二进制文件) -> apache-tomcat-8.5.37
- Mongo DB 版本: v3.4.10
- mongodb-driver-async: 3.4.2
只要我重新启动Tomcat服务,一切就正常运行。
请帮忙找出问题的根本原因。
P.S .: 我正在使用DeferredResult
和CompletableFuture来创建异步REST API。
我还尝试在应用程序中使用spring.mvc.async.request-timeout
并配置了Tomcat的asynTimeout
,但仍然出现相同的错误。