我正在编写spring-boot应用程序的配置。我正在使用WebMvcConfigurer
界面。我已将SseEmitter()
用于事件处理,因此将默认超时设置为30秒(因为SseEmitter
的默认超时为30秒)。但是,在30秒后,它发出警告Async request timed out
。有没有办法再次设置超时或处理此错误?请帮助我如何解决此问题。
在此先感谢:)
这是我写的。
@Configuration
public class EventConfiguration implements WebMvcConfigurer {
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(30000);
}
}
我遇到以下错误:
2019-10-30 11:35:02.711 WARN 10728 --- [nio-8090-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Async request timed out
2019-10-30 11:35:02.712 WARN 10728 --- [nio-8090-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]
2019-10-30 11:35:03.699 WARN 10728 --- [nio-8090-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Async request timed out
2019-10-30 11:35:03.701 WARN 10728 --- [nio-8090-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]
答案 0 :(得分:0)
如果您只想处理异常,则可以为其编写异常处理程序,如下所示
@ExceptionHandler(AsyncRequestTimeoutException.class)
public final ResponseEntity<Object> handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex, WebRequest request) {
....
....
}
如果您想做更多事情,可以编写自己的TimeoutCallableProcessingInterceptor
@Bean
public CallableProcessingInterceptor callableProcessingInterceptor() {
return new TimeoutCallableProcessingInterceptor() {
@Override
public <T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception {
log.error("timeout!");
return super.handleTimeout(request, task);
}
};
}
注意,我还没有尝试过,请告诉我们是否可行