Spring-Boot异步Restcall超时处理

时间:2015-01-06 16:21:05

标签: rest exception asynchronous timeout spring-boot

我再次需要帮助,当我使用spring-xml获得该项目时,它有效,但我不知道如何注册CallableProcessingInterceptor,以便在超时后抛出异常。

我正在使用Spring-Boot 1.10,One Client-Application调用RestApplication。当RestApplication的响应时间过长时,客户端会在后台抛出超时,但在浏览器中没有任何事情发生。

我已经有一个名为TimeoutCallableProcessingInterceptor的类,它在使用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注册该拦截器。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

啊,我得到了解决方案:

首先使用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();
}