Spring-Boot 异步 Restcall 超时处理

Spring-Boot Async Restcall Timeout Handling

我再次需要帮助,当我得到那个带有 spring-xml 的项目时它工作了,但我不知道如何注册一个 CallableProcessingInterceptor,以便它在超时后抛出异常。

我正在使用 Spring-Boot 1.10,一个客户端应用程序调用 RestApplication。当 RestApplication 的响应时间过长时,客户端在后台抛出超时,但在浏览器中没有任何反应。

我已经得到一个名为 TimeoutCallableProcessingInterceptor 的 class,它在使用 XML-Config 之前的工作原理。

public class TimeoutCallableProcessingInterceptor extends CallableProcessingInterceptorAdapter {

@Override
public <T> Object handleTimeout(final NativeWebRequest request, final Callable<T> task) throws Exception {
    throw new IllegalStateException("[" + task.getClass().getName() + "] timed out");
}

}

====

WebMvcConfig

// Themeleaf and ApacheTiles Configs

...


@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
    return new TimeoutCallableProcessingInterceptor();
}

如何以及在哪里可以使用 JAVACONFIG 注册该拦截器。

如果您需要更多信息,请告诉我。

谢谢。

啊,我找到解决办法了:

首先用 WebMvcConfigurationSupport 扩展你的 Config-Class 然后覆盖方法 configureAsyncSupport:

@Value("${server.session-timeout}") private Long sessionTimeOut;

@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
    configurer.setDefaultTimeout(sessionTimeOut * 1000L);
    configurer.registerCallableInterceptors(timeoutInterceptor());
}

@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
    return new TimeoutCallableProcessingInterceptor();
}