Я создаю объект RestTemplate
один раз в методе @PostConstruct
и использую этот экземпляр для выполнения всех HTTP-вызовов из моего приложения. Например:
@Service
public class MicroserviceIntercomm {
private RestTemplate restTemplate;
private @Autowired RequestBean requestBean; //RequestScope
@PostConstruct
public void init() throws IllegalArgumentException, UnsupportedEncodingException, NoSecretProvidedException, NoAlgorithmSetException, GenerateTokenException, InvalidEndpointException {
headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
SimpleClientHttpRequestFactory clientHttpReq = new SimpleClientHttpRequestFactory();
clientHttpReq.setConnectTimeout(connectionTimeout);
clientHttpReq.setReadTimeout(readTimeout);
restTemplate = new RestTemplate(clientHttpReq);
}
public void apiCallFoo() {
headers.set(headerName, requestBean.getJwtToken());
HttpEntity<?> entity = new HttpEntity<>(headers);
HttpEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
}
public void apiCallBar() {
headers.set(headerName, requestBean.getJwtToken());
HttpEntity<?> entity = new HttpEntity<>(headers);
HttpEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
}
}
Из документации неясно, является ли использование RestTemplate
этим способом поточно-ориентированным.
Согласно этой статье блога это:
Это означает, например, что RestTemplate является поточно-ориентированным после создания и что вы можете использовать обратные вызовы для настройки его операций.
Однако при просмотре Javadoc для метода exchange()
явно не указано, что этот метод является поточно-ориентированным.
Должны ли мы внести изменения в этот код, чтобы сделать его поточно-ориентированным, или он работает как задумано?
Мы используем Spring boot 1.5.10.RELEASE.