Java 如何处理spring引导中的异步请求超时?

Java 如何处理spring引导中的异步请求超时?,java,spring-boot,asynchronous,Java,Spring Boot,Asynchronous,我正在为spring启动应用程序编写配置。我正在使用webmvcconfiguer界面。我将默认超时设置为30秒,因为我使用了事件处理的SseEmitter()(因为SseEmitter默认超时为30秒)。但是,30秒后,它会发出警告异步请求超时。有没有办法再次设置超时或处理此错误?请帮我解决这个问题。 提前感谢:) 这是我写的 @Configuration public class EventConfiguration implements WebMvcConfigurer { @Ov

我正在为spring启动应用程序编写配置。我正在使用
webmvcconfiguer
界面。我将默认超时设置为30秒,因为我使用了事件处理的
SseEmitter()
(因为
SseEmitter
默认超时为30秒)。但是,30秒后,它会发出警告
异步请求超时
。有没有办法再次设置超时或处理此错误?请帮我解决这个问题。 提前感谢:)

这是我写的

@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]

如果您想简单地处理异常,那么您可以为它编写一个异常处理程序,如下所示

@ExceptionHandler(AsyncRequestTimeoutException.class)
    public final ResponseEntity<Object> handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex, WebRequest request) {
       ....
       ....
    }
@ExceptionHandler(AsyncRequestTimeoutException.class)
public final ResponseEntity handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex,WebRequest请求){
....
....
}
如果您想做更多的事情,可以编写自己的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);
            }
        };
}
@Bean
公共CallableProcessingInterceptor CallableProcessingInterceptor(){
返回新的TimeoutCallableProcessingInterceptor(){
@凌驾
公共对象handleTimeout(NativeWebRequest请求,可调用任务)引发异常{
log.error(“超时!”);
返回super.handleTimeout(请求、任务);
}
};
}

注意我没有尝试过这个,请告诉我们它是否有效

您可以尝试使用WebAsyncTask以及错误和超时回调方法的给定链接: