Timeout to RestTemplate
- We can set Timeout in 2 ways to RestTemplate
- First way is set setConnectTimeout(), setReadTimeout() on RestTemplateBuilder object.
- second way is get HttpRequestFactory from RestTemplate and set timeouts.
Using RestTemplateBuilder
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.MediaType;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class UserService {
private final RestTemplate restTemplate;
public UserService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.setConnectTimeout(2000).setReadTimeout(3000)
.errorHandler(new MyErrorHandler()).build();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
messageConverters.add(converter);
this.restTemplate.setMessageConverters(messageConverters);
}
public Object getUser(int userId) {
return this.restTemplate.getForObject("https://jsonplaceholder.typicode.com/todos/" + userId, Object.class);
}
}
Using SimpleClientHttpRequestFactory
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.MediaType;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class UserService {
private final RestTemplate restTemplate;
public UserService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.errorHandler(new MyErrorHandler()).build();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
messageConverters.add(converter);
this.restTemplate.setMessageConverters(messageConverters);
}
public Object getUser(int userId) {
SimpleClientHttpRequestFactory httpComponentsClientHttpRequestFactory = (SimpleClientHttpRequestFactory) this.restTemplate
.getRequestFactory();
httpComponentsClientHttpRequestFactory.setConnectTimeout(2000);
httpComponentsClientHttpRequestFactory.setReadTimeout(3000);
return this.restTemplate.getForObject("https://jsonplaceholder.typicode.com/todos/" + userId, Object.class);
}
}