[SPRING] RestTemplate - 기본 타임 아웃 값
SPRINGRestTemplate - 기본 타임 아웃 값
Spring의 RestTemplate을 사용할 때 기본 타임 아웃 값은 얼마입니까?
예를 들어 다음과 같은 웹 서비스를 호출합니다.
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://webservice.com/item/3455", String.class);
RestTemplate에 내장 된 시간 초과 값이 있습니까? 타임 아웃 값을 변경할 계획이 아니지만 모든 요청에 대해 합당한 시간 초과가 있는지 확인하고자합니다.
해결법
-
==============================
1.시간 초과 매개 변수에 SimpleClientHttpRequestFactory를 사용할 수 있다고 생각합니다. SimpleClientHttpRequestFactory의 인스턴스는 생성자 또는 설정 메서드로 템플릿을 나머지로 설정할 수 있습니다.
시간 초과 매개 변수에 SimpleClientHttpRequestFactory를 사용할 수 있다고 생각합니다. SimpleClientHttpRequestFactory의 인스턴스는 생성자 또는 설정 메서드로 템플릿을 나머지로 설정할 수 있습니다.
기본적으로 RestTemplate은 SimpleClientHttpRequestFactory를 사용하므로 값을 restTemplate에 직접 설정할 수 있습니다.
-
==============================
2.Spring-android RestTemplate의 멋진 기능 중 하나는 OS 버전에 따라 RequestFactory를 적절히 구현 한 것입니다 (Google에서 권장).
Spring-android RestTemplate의 멋진 기능 중 하나는 OS 버전에 따라 RequestFactory를 적절히 구현 한 것입니다 (Google에서 권장).
따라서 HttpComponentsClientHttpRequestFactory (Android OS 버전 <2.3) 용 spring-android에서 사용되는 HttpComponentsClientHttpRequestFactory는 고려되지 않았기 때문에 이전 답변이 가득차 있지 않습니다.
내 솔루션은 다음과 같습니다.
public class MyRestTemplate extends RestTemplate { public MyRestTemplate() { if (getRequestFactory() instanceof SimpleClientHttpRequestFactory) { Log.d("HTTP", "HttpUrlConnection is used"); ((SimpleClientHttpRequestFactory) getRequestFactory()).setConnectTimeout(10 * 1000); ((SimpleClientHttpRequestFactory) getRequestFactory()).setReadTimeout(10 * 1000); } else if (getRequestFactory() instanceof HttpComponentsClientHttpRequestFactory) { Log.d("HTTP", "HttpClient is used"); ((HttpComponentsClientHttpRequestFactory) getRequestFactory()).setReadTimeout(10 * 1000); ((HttpComponentsClientHttpRequestFactory) getRequestFactory()).setConnectTimeout(10 * 1000); } } }
-
==============================
3.명시 적으로 질문에 답변하려면 ...
명시 적으로 질문에 답변하려면 ...
기본 제한 시간은 무한합니다.
기본적으로 RestTemplate은 SimpleClientHttpRequestFactory를 사용하고 HttpURLConnection을 사용합니다.
기본적으로 HttpURLConnection의 시간 제한은 0입니다. 즉, 다음 속성에 의해 설정되지 않은 한 무한대입니다.
-Dsun.net.client.defaultConnectTimeout=TimeoutInMiliSec -Dsun.net.client.defaultReadTimeout=TimeoutInMiliSec
-
==============================
4.RestTemplate 생성자에서 ClientHttpRequestFactory 매개 변수를 사용할 수 있습니다.
RestTemplate 생성자에서 ClientHttpRequestFactory 매개 변수를 사용할 수 있습니다.
private final int HTTP_CONNECT_TIMEOUT = 15000; private final int HTTP_READ_TIMEOUT = 10000; private ClientHttpRequestFactory getClientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); clientHttpRequestFactory.setConnectTimeout(HTTP_CONNECT_TIMEOUT); clientHttpRequestFactory.setReadTimeout(HTTP_READ_TIMEOUT); return clientHttpRequestFactory; }
새 RestTemplate이 필요할 때 다음 예제와 같이 만듭니다.
RestTemplate rt = new RestTemplate(getClientHttpRequestFactory());
from https://stackoverflow.com/questions/11537591/resttemplate-default-timeout-value by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 3이 작동하지 않습니다 @ json 요청시 400 오류 요청 오류가 발생했습니다. (0) | 2019.05.22 |
---|---|
[SPRING] 1.8.6 : CronTriggerBean 클래스에 setCronExpression 메서드가 노출되지 않음 (0) | 2019.05.22 |
[SPRING] 응용 프로그램 간 Spring Cloud Config Server 공유 등록 정보 (0) | 2019.05.22 |
[SPRING] 부트 스트랩 유효성 검사에서 사용자 지정 유효성 검사를 만드는 방법 (0) | 2019.05.22 |
[SPRING] HttpComponentsMessageSender를 사용하여 기본 Auth가있는 WebServiceTemplate (0) | 2019.05.22 |