我已经阅读了一些有关在Java Web应用程序中使用REST管理Bean的实现REST客户端的教程。

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

通常,Web应用程序使用单例spring bean。

所以我想知道什么时候在Spring中使用RestTemplate配置应用程序的最佳实践是什么?
使用Singleton RestTemplate吗?
在每个请求中创建RestTemplate。 ?


请提出建议并描述所有情况。

最佳答案

最好的方法之一是创建一个将返回RestTemplate的bean,然后将其 Autowiring 到所需的任何类中。

这样的事情。

@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);
    }
}

这样,您可以为休息 call 设置不同的参数,例如超时或凭据等。当您要使用它时,您可以
@Autowired
RestTemplate restTemplateForProductService;

restTemplateForProductService.......

相对于使用new RestTemplate ()而言,此方法的另一个优点是,如果您必须通过REST调用不同的服务,则可以定义多个具有不同配置的Bean(它们返回RestTemplates并使用名称自动将其连接

07-24 18:41
查看更多