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();
}
我再次需要帮助,当我得到那个带有 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();
}