我已经阅读了一些有关在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并使用名称自动将其连接