You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:42:03