我再次需要帮助,当我使用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注册该拦截器。
如果您需要更多信息,请告诉我们。
谢谢。
答案 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();
}