Tengo una aplicación que hace uso de múltiples clientes de descanso. Cada uno de esos clientes REST usa el mismo bean de plantilla Spring REST. Me preguntaba si había alguna manera de establecer el valor de tiempo de espera por solicitud utilizando la plantilla de descanso de primavera.
Esto funcionó para mí...
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory()); private ClientHttpRequestFactory getClientHttpRequestFactory() { int timeout = 5000; HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); clientHttpRequestFactory.setConnectTimeout(timeout); return clientHttpRequestFactory; }Para lograr llamar a la plantilla de descanso con el tiempo de espera, primero debe crear una clase de configuración que también se use con la anotación @Bean, luego implementar en la clase y llamar con RestTemplateConfig.
@Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(clientHttpRequestFactory()); } private ClientHttpRequestFactory clientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); clientHttpRequestFactory.setConnectionRequestTimeout(4000); clientHttpRequestFactory.setReadTimeout(4000); clientHttpRequestFactory.setConnectTimeout(4000); return clientHttpRequestFactory; } }Pero le sugiero que use Apache HttpClient, puede administrar el grupo de conexiones, mantener vivo, monitorear inactivo y también crear un controlador de errores personalizado. Puede consultar el enlace: https://springframework.guru/using-resttemplate-with-apaches-httpclient/
También puede modificar SimpleClientHttpRequestFactory.
RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(customHttpRequestFactory()); private SimpleClientHttpRequestFactory customHttpRequestFactory() { SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory(); simpleClientHttpRequestFactory.setReadTimeout(2000); simpleClientHttpRequestFactory.setConnectTimeout(2000); return simpleClientHttpRequestFactory; }