使用spring RestTemplate在rest客户端上的最佳实践

我已经阅读了一些关于在java web应用程序中实现REST客户端的教程,这些教程使用SPRING来管理bean.

我发现的每个例子,每次执行REST请求时都会创建新的RestTemplate.

通常,Web应用程序使用singleton spring bean.

所以我想知道什么时候在Spring配置应用程序中使用RestTemplate的最佳做法是什么?
使用singleton RestTemplate?
在每个请求中创建RestTemplate. ?

请告知并描述所有情况.

最佳答案
执行此操作的最佳方法之一是创建一个bean,该bean将返回RestTemplate,然后将其自动装配到您需要的类中.

像这样的东西.

@Configuration
public class ProductServiceConfig {

    @Value("${product.username}")
    private String productServiceUsername;

    @Value("${product.password}")
    private String productServicePassword;

    @Bean(name = "restTemplateForProductService")
    public RestTemplate prepareRestTemplateForProductService() {

        BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(productServiceUsername, productServicePassword));

        RequestConfig.Builder requestBuilder = RequestConfig.custom();
        requestBuilder = requestBuilder.setConnectTimeout(1000);

        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
        httpClientBuilder.setDefaultRequestConfig(requestBuilder.build());
        CloseableHttpClient httpClient = httpClientBuilder.build();

        HttpComponentsClientHttpRequestFactory rf = new HttpComponentsClientHttpRequestFactory(httpClient);

        return new RestTemplate(rf);
    }
}

通过这种方式,您可以为休息呼叫设置所需的不同参数,例如超时或凭据等.当您想要使用时,您可以这样做

@Autowired
RestTemplate restTemplateForProductService;

restTemplateForProductService.......

这比使用新的RestTemplate()的另一个好处是,如果你必须通过REST调用不同的服务,那么你可以定义多个bean(具有不同的配置),它返回RestTemplates并使用名称自动装配它

转载注明原文:使用spring RestTemplate在rest客户端上的最佳实践 - 代码日志