我有一個Spring Boot REST服務,有時會將第三方服務作爲請求的一部分來調用。我想設置所有資源的超時時間(比如說5秒),這樣如果任何請求處理(整個鏈,從傳入到響應)花費超過5秒鐘,我的控制器將響應HTTP 503而不是實際的響應。這將是真棒,如果這只是一個彈簧屬性,例如設置Spring Boot REST API - 請求超時?
spring.mvc.async.request-timeout=5000
但我沒有任何運氣。我也嘗試過擴展WebMvcConfigurationSupport並重寫configureAsyncSupport:
@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(5000);
configurer.registerCallableInterceptors(timeoutInterceptor());
}
@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
return new TimeoutCallableProcessingInterceptor();
}
沒有任何運氣。
我懷疑我必須手動計時所有第三方調用,如果它們花費太長時間,則會引發超時異常。是對的嗎?或者是否有更簡單,更全面的解決方案來涵蓋我的所有請求端點?
如果使用Java 8,也可以用蘭巴表達式: 'return() - > {/ *在這裏做你的東西* /}'; – demaniak