Spring RestTemplate遇HTTP 503自动重试,如何彻底禁用该机制?
彻底禁用RestTemplate的503重试行为
问题原因
Spring 6.x(对应Spring Boot 3.x)中,RestTemplate默认使用的SimpleClientHttpRequestFactory新增了针对HTTP 503状态码的重试逻辑,且retryOnConnectionFailure属性默认开启,这是旧版本Spring没有的行为,导致服务端返回503时会自动重试一次。
解决方案
方案1:基于默认的SimpleClientHttpRequestFactory关闭重试
自定义RestTemplate实例,显式关闭请求工厂的重试开关:
@Bean public RestTemplate restTemplate() { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); // 关闭所有连接失败及状态码触发的重试 requestFactory.setRetryOnConnectionFailure(false); return new RestTemplate(requestFactory); }
方案2:使用Apache HttpClient并禁用自动重试
如果项目依赖了Apache HttpClient(引入org.apache.httpcomponents:httpclient依赖),可以通过配置HttpClient来禁用自动重试:
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { CloseableHttpClient httpClient = HttpClientBuilder.create() .disableAutomaticRetries() // 禁用所有自动重试 .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); return new RestTemplate(requestFactory); } }
验证方法
修改后重新发起请求,观察自研服务器的请求日志,确认503响应时仅收到一次请求即可。
内容的提问来源于stack exchange,提问作者user1883212
相关产品推荐
相关产品推荐

