用这种方式创建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

10-05 23:21