Използвам RestTemplate заедно с неговата фабрика HttpComponentsClientHttpRequestFactory в един от моите проекти. В този проект трябва да направя Http url извикване към моя сървър, който изпълнява спокойна услуга, която връща отговора като JSON низ.
По-долу е моят код -
public class GetUserClientData {
public String getData(KeyHolder keys) {
return new HTTPRequestAccess(keys).makeHttpRequest();
}
}
По-долу е моят клас, който обвива частта HttpClient -
public class HTTPRequestAccess {
// should this be static?
private RestTemplate restTemplate;
private KeyHolder keys;
private int timeout;
public HTTPRequestAccess(KeyHolder keys){
this(keys.getTimeoutValue()); // setting timeout to RestTemplate
this.keys = keys;
}
public HTTPRequestAccess(int timeout) {
this.timeout = timeout;
restTemplate = new RestTemplate(clientHttpRequestFactory());
}
private ClientHttpRequestFactory clientHttpRequestFactory() {
// is this not expensive that every time we are creating this new object?
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(timeout);
factory.setConnectTimeout(timeout);
return factory;
}
public String makeHttpRequest() {
String response = null;
try {
// some logic here
String url = generateURL();
response = restTemplate.getForObject(url, String.class);
// some logic here
} catch (RestClientException ex) {
// log exception and do some stuff
} catch (Exception ex) {
// log exception
}
return response;
}
}
Трябва ли RestTemplate
и HttpComponentsClientHttpRequestFactory
да са статични тук в моя HTTPRequestAccess
клас, сякаш го виждам правилно, аз пресъздавам целия пул за връзка за всяка заявка в RestTemplate
, което не е правилният начин, предполагам, защото всяка фабрика има връзка и пул от нишки и те са доста тежък предмет предполагам.
Като цяло кой е най-добрият начин да се използва RestTemplate
заедно с неговата фабрика HttpComponentsClientHttpRequestFactory
в многонишкова среда? Предполагам, че RestTemplate
е безопасен за нишки, но не мисля, че HttpComponentsClientHttpRequestFactory
е безопасен за нишки. Поправи ме ако греша? Ще работя с тази библиотека при голямо натоварване.
Използвам версия spring-web-3.2.8.RELEASE
.