用这种方式创建RestTemplate有什么区别
RestTemplate restTemplate = restTemplateBuilder
.setConnectTimeout(Duration.ofMillis(connectTimeout))
.setReadTimeout(Duration.ofMillis(readTimeout))
.build();
这样
CloseableHttpClient httpClient = HttpClientBuilder.create().disableCookieManagement().build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
factory.setReadTimeout(readTimeout);
factory.setConnectTimeout(connectTimeout);
RestTemplate restTemplate = new RestTemplate(factory);
????
最佳答案
我认为您对Scope restTemplateBuilder.Spring文档中提到的问题:
Scope of restTemplateBuilder
为了使所有定制的范围尽可能狭窄,请注入
自动配置的RestTemplateBuilder,然后将其方法调用为
需要。每个方法调用都会返回一个新的RestTemplateBuilder实例,
因此,自定义仅影响构建器的这种使用。
例:
private RestTemplate restTemplate;
@Autowired
public HelloController(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
要进行整个应用程序的加性自定义,请使用
RestTemplateCustomizer bean。所有这些豆都是自动的
在自动配置的RestTemplateBuilder中注册,并且
应用于使用它构建的任何模板。
例
static class ProxyCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
HttpHost proxy = new HttpHost("proxy.example.com");
HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context)
throws HttpException {
if (target.getHostName().equals("192.168.0.5")) {
return null;
}
return super.determineProxy(target, request, context);
}
}).build();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
}
注意:对于狭窄使用RestTemplateBuilder。对于使用RestTemplateCustomizer的应用程序范围
参考链接:Reference link
其他详细示例:Additional example