ä¾åé¢ä¿ã®è¿½å
build.gradle
ã«ä»¥ä¸ã®ä¾åé¢ä¿ã追å ããã SpringBootã¨åããã¼ã¸ã§ã³ã使ç¨ããããããã¼ã¸ã§ã³ã®è¨è¿°ã¯ä¸è¦ã
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
RestTemplateã®ã¤ã³ã¹ã¿ã³ã¹ãä½æãã
ã³ã³ã¹ãã©ã¯ã¿ã§ä½æãã
RestTemplateã«ã¯ä»¥ä¸ã®3ã¤ã®ã³ã³ã¹ãã©ã¯ã¿ãç¨æããã¦ããã
ã³ã³ã¹ãã©ã¯ã¿ | 説æ |
---|---|
RestTemplate() | ããã©ã«ãè¨å®ã使ç¨ãã¦ãRestTemplate ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãä½æããã |
RestTemplate(ClientHttpRequestFactory requestFactory) | æå®ããã ClientHttpRequestFactory ã«åºã¥ãã¦ãRestTemplate ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãä½æããã |
RestTemplate(List<HttpMessageConverter<?>> messageConverters) | HttpMessageConverter ã®ãªã¹ãã使ç¨ãã¦ãRestTemplate ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãä½æãã |
RestTemplate()
ç¹ã«ç¬èªã®è¨å®ãè¡ããªãå ´åã«ä½¿ç¨ããã
public void doSomething(){ RestTemplate template = new ResuTemplate(); }
RestTemplate(ClientHttpRequestFactory requestFactory)
ç¹ã«ClientHttpRequestFactoryãæå®ããªãå ´åã¯org.springframework.http.client.SimpleClientHttpRequestFactory
ã使ç¨ãããã
ä¸è¨ã®ããã©ã«ãã§ä½¿ç¨ãããã¯ã©ã¹ã§ã¯ã³ãã¯ã·ã§ã³ã¿ã¤ã ã¢ã¦ãã®è¨å®ãªã©ãã§ããã
ã¿ã¤ã ã¢ã¦ãã®ããã©ã«ãå¤ã¯ã·ã¹ãã ã®ããã©ã«ãã®ã¿ã¤ã ã¢ã¦ãå¤ã®ãããRestTemplateã§å¥ã®ã¿ã¤ã ã¢ã¦ãå¤ãæå®ãããå ´åãªã©ã«ä½¿ç¨ããã
public void doSomething(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(3000); // ããªç§ã§æå® RestTemplate template = new ResuTemplate(factory); }
SimpleClientHttpRequestFactoryã¯ã©ã¹ã§è¨å®ã§ããå¤ãªã©ã«ã¤ãã¦ã¯ãå ¬å¼ã®Javadocåç §ã
RestTemplate(List<HttpMessageConverter<?>> messageConverters)
ç¬èªã®ã¡ãã»ã¼ã¸ã³ã³ãã¼ã¿ãä½æãã¦ãã¦ãããã使ç¨ãããå ´åã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã§æå®ããã
ã¡ãã»ã¼ã¸ã³ã³ãã¼ã¿ã¯ãã¢ããªã±ã¼ã·ã§ã³ã§æ±ãJavaãªãã¸ã§ã¯ãã¨JSONçãç¸äºã«å¤æããããã®ã¤ã³ã¿ãã§ã¼ã¹ã§ãããRestTemplateã§ã¯ããã©ã«ãã§ããã¤ãè¨å®ããã¦ãããï¼åç
§ï¼
â»ãã®ã¡ã½ããã§è¨å®ãä¸æ¸ãããå ´åã¯å
ã
è¨å®ããã¦ãããã®ã¯åé¤ãããã®ã§æ³¨æããã
RestTemplateBuilderã使ç¨ãã
ã³ã³ã¹ãã©ã¯ã¿ã§ã¯ãã¾ãç´°ããè¨å®ãã§ããªããããç´°ããè¨å®ãè¡ãããå ´åãè¤æ°ã®è¨å®ãè¡ãããå ´åã¯RestTemplateBuilder
ã使ç¨ããã
RestTemplateBuilderã¯DIã³ã³ããããåå¾ãããã¨ãã§ããã
public class SampleHttpClient { // ã³ã³ã¹ãã©ã¯ã¿ã¤ã³ã¸ã§ã¯ã·ã§ã³ã§åå¾ public SampleHttpClient(RestTemplateBuilder builder){ RestTemplate template = builder.build(); } }
RestTemplateBuilderã«ç¨æããã¦ããã¡ã½ããã«ã¯ä¸è¨ã®ãã®ãããã
ã¡ã½ããå | å¼æ° | 説æ |
---|---|---|
additionalCustomizers | Collection<? extends RestTemplateCustomizer> customizers | RestTemplateCustomizersã追å ãã |
additionalCustomizers | RestTemplateCustomizer⦠customizers | RestTemplateCustomizersã追å ãã |
additionalInterceptors | Collection<? extends ClientHttpRequestInterceptor> interceptors | ClientHttpRequestInterceptorsã追å ãã |
additionalInterceptors | ClientHttpRequestInterceptor⦠interceptors | ClientHttpRequestInterceptorsã追å ãã |
additionalMessageConverters | Collection<? extends HttpMessageConverter<?>> messageConverters | HttpMessageConvertersã追å ãã |
additionalMessageConverters | HttpMessageConverter<?>... messageConverters | HttpMessageConvertersã追å ãã |
additionalRequestCustomizers | Collection<? extends RestTemplateRequestCustomizer<?>> requestCustomizers | RestTemplateRequestCustomizersã追å ãã |
additionalRequestCustomizers | RestTemplateRequestCustomizer<?>... requestCustomizers | RestTemplateRequestCustomizersã追å ãã |
basicAuthentication | String username String password |
æå®ãããã¦ã¼ã¶ã¼å/ãã¹ã¯ã¼ãã®ãã¢ãæã¤ãªã¯ã¨ã¹ãã«HTTPåºæ¬èªè¨¼ã追å ãã |
basicAuthentication | String username String password Charset charset |
æå®ãããã¦ã¼ã¶ã¼å/ãã¹ã¯ã¼ãã®ãã¢ãæã¤ãªã¯ã¨ã¹ãã«HTTPåºæ¬èªè¨¼ã追å ãã |
customizers | Collection<? extends RestTemplateCustomizer> customizers | RestTemplateCustomizersãè¨å®ãã |
customizers | RestTemplateCustomizer⦠customizers | RestTemplateCustomizersãè¨å®ãã |
defaultHeader | String name String⦠values |
ããã©ã«ããããã¼ãè¨å®ãã |
defaultMessageConverters | ãªã | RestTemplateããã©ã«ãã®HttpMessageConvertersãè¨å®ãã |
detectRequestFactory | boolean detectRequestFactory | ClientHttpRequestFactory ãã¯ã©ã¹ãã¹ã«åºã¥ãã¦æ¤åºããå¿ è¦ãããå ´åtrueãè¨å®ãã |
errorHandler | ResponseErrorHandler errorHandler | ResponseErrorHandlerãè¨å®ãã |
interceptors | ClientHttpRequestInterceptor⦠interceptors | ClientHttpRequestInterceptorsãè¨å®ãã |
interceptors | Collection<ClientHttpRequestInterceptor> interceptors | ClientHttpRequestInterceptorsãè¨å®ãã |
messageConverters | Collection<? extends HttpMessageConverter<?>> messageConverters | HttpMessageConvertersãè¨å®ãã |
messageConverters | HttpMessageConverter<?>... messageConverters | HttpMessageConvertersãè¨å®ãã |
requestCustomizers | Collection<? extends RestTemplateRequestCustomizer<?>> requestCustomizers | RestTemplateRequestCustomizersãè¨å®ãã |
requestCustomizers | RestTemplateRequestCustomizer<?>... requestCustomizers | RestTemplateRequestCustomizersãè¨å®ãã |
requestFactory | Class<? extends ClientHttpRequestFactory> requestFactory | ClientHttpRequestFactoryã¯ã©ã¹ãè¨å®ãã |
requestFactory | Supplier<ClientHttpRequestFactory> requestFactory | ClientHttpRequestFactoryã®Supplierãè¨å®ãã |
rootUri | String rootUri | â/â ã§å§ã¾ãåãªã¯ã¨ã¹ãã«é©ç¨ãããã«ã¼ã URL ãè¨å®ãã |
setBufferRequestBody | boolean bufferRequestBody | ClientHttpRequestFactoryããªã¯ã¨ã¹ãæ¬æãå é¨çã«ãããã¡ãªã³ã°ããå¿ è¦ããããã©ãããè¨å®ãã |
setConnectTimeout | Duration connectTimeout | ã³ãã¯ã·ã§ã³ã¿ã¤ã ã¢ã¦ããè¨å®ãã |
setReadTimeout | Duration readTimeout | èªã¿åãã¿ã¤ã ã¢ã¦ããè¨å®ãã |
uriTemplateHandler | UriTemplateHandler uriTemplateHandler | UriTemplateHandler ãè¨å®ãã |
RestTemplateã§ãªã¯ã¨ã¹ããéä¿¡ãã
RestTemplateã«ã¯å種HTTPã¡ã½ããã®ãªã¯ã¨ã¹ããéãããã®ã¡ã½ãããç¨æããã¦ããã
GET
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
ResponseEntity<T> | getForEntity | String Class<T> Object⦠|
url responseType uriVariables |
URL ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | getForEntity | String Class<T> Map<String, ?> |
url responseType uriVariables |
URL ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | getForEntity | URI Class<T> |
url responseType |
URL ã¬ã¹ãã³ã¹ããã£ã®å |
T | getForObject | String Class<T> Object⦠|
url responseType uriVariables |
URL ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
T | getForObject | String Class<T> Map<String, ?> |
url responseType uriVariables |
URL ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
T | getForObject | URI Class<T> |
url responseType |
URL ã¬ã¹ãã³ã¹ããã£ã®å |
DELETE
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
void | delete | String Object⦠|
url uriVariables |
URL URLã®åãè¾¼ã¿æå |
void | delete | String Map<String, ?> |
url uriVariables |
URL URLã®åãè¾¼ã¿æå |
void | delete | URI | url | URL |
PUT
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
void | put | String Object Object⦠|
url request uriVariables |
URL ãªã¯ã¨ã¹ããã㣠URLã®åãè¾¼ã¿æå |
void | put | String Object Map<String, ?> |
url request uriVariables |
URL ãªã¯ã¨ã¹ããã㣠URLã®åãè¾¼ã¿æå |
void | put | URI Object |
url request |
URL ãªã¯ã¨ã¹ããã㣠|
POST
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
ResponseEntity<T> | postForEntity | String Object Class<T> Object⦠|
url request responseType uriVariables |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | postForEntity | String Object Class<T> Map<String, ?> |
url request responseType uriVariables |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | postForEntity | URI Object Class<T> |
url request responseType |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å |
T | postForObject | String Object Class<T> Object⦠|
url request responseType uriVariables |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
T | postForObject | String Object Class<T> Map<String, ?> |
url request responseType uriVariables |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
T | postForObject | URI Object Class<T> |
url request responseType |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å |
URI | postForLocation | String Object Object⦠|
url request uriVariables |
URL ãªã¯ã¨ã¹ããã㣠URLã®åãè¾¼ã¿æå |
URI | postForLocation | String Object Map<String, ?> |
url request uriVariables |
URL ãªã¯ã¨ã¹ããã㣠URLã®åãè¾¼ã¿æå |
URI | postForLocation | URI Object |
url request |
URL ãªã¯ã¨ã¹ããã㣠|
HEAD
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
HttpHeaders | headForHeaders | String Object⦠|
url uriVariables |
URL URLã®åãè¾¼ã¿æå |
HttpHeaders | headForHeaders | String Map<String, ?> |
url uriVariables |
URL URLã®åãè¾¼ã¿æå |
HttpHeaders | headForHeaders | URI | url | URL |
PATCH
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
T | patchForObject | String Object Class<T> Object⦠|
url request responseType uriVariables |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
T | patchForObject | String Object Class<T> Map<String, ?> |
url request responseType uriVariables |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
T | patchForObject | URI Object Class<T> |
url request responseType |
URL ãªã¯ã¨ã¹ããã㣠ã¬ã¹ãã³ã¹ããã£ã®å |
OPTIONS
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
Set<HttpMethod> | optionsForAllow | String Object⦠|
url uriVariables |
URL URLã®åãè¾¼ã¿æå |
Set<HttpMethod> | optionsForAllow | String Map<String, ?> |
url uriVariables |
URL URLã®åãè¾¼ã¿æå |
Set<HttpMethod> | optionsForAllow | URI | url | URL |
æ±ç¨
ãªã¯ã¨ã¹ããããã使ç¨ãããå ´åãªã©ã¯æ±ç¨çãªãã®ã¡ã½ããã使ç¨ããã
ParameterizedTypeReference
ã¬ã¹ãã³ã¹ããã£ããªã¹ããããããªã©ç·ç§°åãä¼´ãã¯ã©ã¹ã«ãããã³ã°ãããå ´åã«ä½¿ç¨ããã
ResponseEntity<List<Todo>> responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<List<MyClass>>() {});
org.springframework.http.HttpEntity<T>
ãªã¯ã¨ã¹ãã®ãããã¼ã»ããã£ãæ ¼ç´ããã¯ã©ã¹ã
HttpEntity entity = new HttpEntity<Object>(requestBody, headers)
æ»ãå¤ | ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ |
---|---|---|---|---|
ResponseEntity<T> | exchange | String HttpMethod HttpEntity<?> Class<T> Object⦠|
url method requestEntity responseType uriVariables |
URL HTTPã¡ã½ãã ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | exchange | String HttpMethod HttpEntity<?> Class<T> Map<String, ?> |
url method requestEntity responseType uriVariables |
URL HTTPã¡ã½ãã ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | exchange | String HttpMethod HttpEntity<?> Class<T> |
url method requestEntity responseType |
URL HTTPã¡ã½ãã ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å |
ResponseEntity<T> | exchange | String HttpMethod HttpEntity<?> ParameterizedTypeReference<T> Object⦠|
url method requestEntity responseType uriVariables |
URL HTTPã¡ã½ãã ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | exchange | String HttpMethod HttpEntity<?> ParameterizedTypeReference<T> Map<String, ?> |
url method requestEntity responseType uriVariables |
URL HTTPã¡ã½ãã ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å URLã®åãè¾¼ã¿æå |
ResponseEntity<T> | exchange | String HttpMethod HttpEntity<?> ParameterizedTypeReference<T> |
url method requestEntity responseType |
URL HTTPã¡ã½ãã ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å |
ResponseEntity<T> | exchange | HttpEntity<?> Class<T> |
requestEntity responseType |
ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å |
ResponseEntity<T> | exchange | HttpEntity<?> ParameterizedTypeReference<T> |
requestEntity responseType |
ãªã¯ã¨ã¹ã ã¬ã¹ãã³ã¹ããã£ã®å |
ãã®ä»è¨å®ç³»ã¡ã½ãã
// è¨å®ããã¦ããã¡ãã»ã¼ã¸ã³ã³ãã¼ã¿ã¼ã¨ç §åãã¦ãå¼æ°ã§åãåã£ãã¬ã¹ãã³ã¹ããã£ã®åã«åºã¥ã㦠// ãªã¯ã¨ã¹ãã«Acceptãããã¼ãè¨å®ããRequestCallbackãè¿ã RequestCallback acceptHeaderRequestCallback(Class<T> responseType) // å¼æ°ã§åãåã£ããªã¯ã¨ã¹ãããã£ããªã¯ã¨ã¹ãã¹ããªã¼ã ã«æ¸ãè¾¼ãRequestCallbackãè¿ã RequestCallback httpEntityCallback(@Nullable Object requestBody) // 以ä¸ãæºããRequestCallbackãè¿ã // ã»è¨å®ããã¦ããã¡ãã»ã¼ã¸ã³ã³ãã¼ã¿ã¼ã¨ç §åãã¦ãå¼æ°ã§åãåã£ãã¬ã¹ãã³ã¹ããã£ã®åã«åºã¥ãã¦ãªã¯ã¨ã¹ãã«Acceptãããã¼ãè¨å®ãã // ã»å¼æ°ã§åãåã£ããªã¯ã¨ã¹ãããã£ããªã¯ã¨ã¹ãã¹ããªã¼ã ã«æ¸ãè¾¼ã RequestCallback httpEntityCallback(@Nullable Object requestBody, Type responseType) // ResponseEntity ãæºåãã ResponseExtractor ãè¿ã ResponseExtractor<ResponseEntity<T>> responseEntityExtractor(Type responseType) // URLã®åãè¾¼ã¿æåã®ããã©ã«ãå¤ãè¨å®ããã void setDefaultUriVariables(Map<String, ?> uriVars) // ã¨ã©ã¼ãã³ãã©ã¼ãè¨å®ãã // ããã©ã«ãï¼org.springframework.web.client.DefaultResponseErrorHandler void setErrorHandler(ResponseErrorHandler errorHandler) // 使ç¨ããã¡ãã»ã¼ã¸ããã£ã³ã³ãã¼ã¿ãè¨å®ãã // ãããã®ã³ã³ãã¼ã¿ã¼ã¯ãHTTPãªã¯ã¨ã¹ãããã³ã¬ã¹ãã³ã¹ã®å¤æã«ä½¿ç¨ããã void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) // URI ãã³ãã¬ã¼ããå±éããããã®ãã³ãã©ã¼ãè¨å®ãã // ããã©ã«ãï¼org.springframework.web.util.DefaultUriBuilderFactory void setUriTemplateHandler(UriTemplateHandler handler) // ç¾å¨RestTemplateã«è¨å®ããã¦ããã¨ã©ã¼ãã³ãã©ãã¡ãã»ã¼ã¸ã³ã³ãã¼ã¿çãåå¾ããããã®ã¡ã½ãããã¡ ResponseErrorHandler getErrorHandler() List<HttpMessageConverter<?>> getMessageConverters() UriTemplateHandler getUriTemplateHandler()
ãªãã©ã¤å¦çã®å®è£
Spring-retryã使ç¨ãã¦å®è£ ãè¡ãã
ä¾åé¢ä¿ã®è¿½å
build.gradle
ã«ä»¥ä¸ã®ä¾åé¢ä¿ã追å ããã ãã¼ã¸ã§ã³ã®è¨è¿°ã¯ä¸è¦ã
dependencies { implementation 'org.springframework.retry:spring-retry' implementation 'org.springframework.boot:spring-boot-starter-aop' }
RetryTemplateã®ã¤ã³ã¹ã¿ã³ã¹ãä½æãã
ã³ã³ã¹ãã©ã¯ã¿ã§ä½æããæ¹æ³ã¨RetryTemplateBuilderã§ä½æã¨ãããã
RestTemplateã®æã¨åæ§ã§ãããç´°ããè¨å®ãè¡ãããå ´åã¯RetryTemplateBuilderã§ã¤ã³ã¹ã¿ã³ã¹ãçæããã¨ããã
ã³ã³ã¹ãã©ã¯ã¿ã§ä½æ
RetryTemplate retryTemplate = new RetryTemplate(); // RetryPolicyã®è¨å® // CustomRetryPolicyã¯ç¬èªã«å®ç¾©ããRetryPolicy retryTemplate.setRetryPolicy(new CustomRetryPolicy(4)); // ãªãã©ã¤ééã®è¨å® ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy(); backOffPolicy.setInitialInterval(Duration.ofSeconds(1).toMillis()); retryTemplate.setBackOffPolicy(backOffPolicy)
RetryTemplateBuilderã§ä½æ
// ç¬èªå®ç¾©ãããã®ãè¨å®ããå ´å ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy(); backOffPolicy.setInitialInterval(Duration.ofSeconds(1).toMillis()); RetryTemplate retryTemplate = RetryTemplate.builder() .customPolicy(new CustomRetryPolicy(4)) .customBackoff(backOffPolicy) .build(); // æ¢åã®ãã®ã使ç¨ããå ´å RetryTemplate retryTemplate = RetryTemplate.builder() // æ大ãªãã©ã¤åæ°ï¼æåã®1åãã«ã¦ã³ããããï¼ .maxAttempts(5) // ãªãã©ã¤ã®ã¿ã¤ã ã¢ã¦ãæéè¨å®ï¼ããªç§ï¼ .withinMillis(100000L) // ãªãã©ã¤ééï¼åºå®ï¼ï¼ããªç§ï¼ .fixedBackoff(100L) .build();
RetryTemplateBuilderã§ã¯ä»¥ä¸ã®ãã®ãè¨å®å¯è½ã
ã¡ã½ããå | å¼æ°ã®å | å¼æ°å | å¼æ°ã®èª¬æ | 説æ |
---|---|---|---|---|
customBackoff | BackOffPolicy | backOffPolicy | ããã¯ãªãããªã·ã¼ | ç¬èªã®BackOffPolicyãè¨å®ãã |
customPolicy | RetryPolicy | policy | ãªãã©ã¤ããªã·ã¼ | ç¬èªã®RetryPolicyãè¨å®ãã |
exponentialBackoff | long double long |
initialInterval multiplier maxInterval |
æåã®ãªãã©ã¤éé åºæ°ï¼2ã®å ´å2ã®ç´¯ä¹ã¨ãªã) æ大ã®ãªãã©ã¤éé |
ææ°ããã¯ãªãããªã·ã¼ã®è¨å®ãè¡ãã |
exponentialBackoff | long double long boolean |
initialInterval multiplier maxInterval withRandom |
æåã®ãªãã©ã¤éé åºæ°ï¼2ã®å ´å2ã®ç´¯ä¹ã¨ãªã) æ大ã®ãªãã©ã¤éé ããã¯ãªãééã«ã©ã³ãã æ§ã追å ãããã©ãã |
ææ°ããã¯ãªãããªã·ã¼ã®è¨å®ãè¡ãã |
fixedBackoff | long | interval | ãªãã©ã¤éé | ãªãã©ã¤ééãåºå®å¤ã®ããã¯ãªãããªã·ã¼ã®è¨å®ãè¡ã |
infiniteRetry | - | - | - | ãªãã©ã¤åæ°ãç¡éã¨ãã |
maxAttempts | int | maxAttempts | æ大ãªãã©ã¤åæ° | æ大ãªãã©ã¤åæ°ãè¨å®ãã |
noBackoff | - | - | - | ãªãã©ã¤ééã0ã¨ãã |
notRetryOn | Class<? extends Throwable> | throwable | ä¾å¤ã¯ã©ã¹ | å¼æ°ã§æå®ããä¾å¤ã¯ã©ã¹ããªãã©ã¤å¯¾è±¡å¤ã¨ããããããè¨å®ããå ´åãããã©ã«ãã®Exceptionã¯ã©ã¹ã®ä¾å¤ã¹ãã¼æã«ãªãã©ã¤ãå®æ½ããè¨å®ãåé¤ããã |
notRetryOn | List<Class<? extends Throwable&g>t; | throwables | ä¾å¤ã¯ã©ã¹ã®ãªã¹ã | å¼æ°ã§æå®ããä¾å¤ã¯ã©ã¹ããªãã©ã¤å¯¾è±¡å¤ã¨ããããããè¨å®ããå ´åãããã©ã«ãã®Exceptionã¯ã©ã¹ã®ä¾å¤ã¹ãã¼æã«ãªãã©ã¤ãå®æ½ããè¨å®ãåé¤ããã |
retryOn | Class<? extends Throwable> | throwable | ä¾å¤ã¯ã©ã¹ | å¼æ°ã§æå®ããä¾å¤ã¯ã©ã¹ããªãã©ã¤å¯¾è±¡ã¨ããããããè¨å®ããå ´åãããã©ã«ãã®Exceptionã¯ã©ã¹ã®ä¾å¤ã¹ãã¼æã«ãªãã©ã¤ãå®æ½ããè¨å®ãåé¤ããã |
retryOn | List<Class<? extends Throwable>> | throwables | ä¾å¤ã¯ã©ã¹ã®ãªã¹ã | å¼æ°ã§æå®ããä¾å¤ã¯ã©ã¹ããªãã©ã¤å¯¾è±¡ã¨ããããããè¨å®ããå ´åãããã©ã«ãã®Exceptionã¯ã©ã¹ã®ä¾å¤ã¹ãã¼æã«ãªãã©ã¤ãå®æ½ããè¨å®ãåé¤ããã |
traversingCauses | - | - | - | Spring Retryãã¡ã¤ã³ä¾å¤ã®åå ã調ã¹ãä¾å¤ã®åå ï¼å¥ã®ä¾å¤ï¼ããªãã©ã¤å¯¾è±¡ã®ä¾å¤ã¨ä¸è´ããå ´åã«ãªãã©ã¤ããããã«è¨å®ãã |
uniformRandomBackoff | long long |
minInterval maxInterval |
æå°ãªãã©ã¤éé æ大ãªãã©ã¤éé |
ãªãã©ã¤ééãã©ã³ãã ãªãªãã©ã¤ããªã·ã¼ã®è¨å®ãè¡ã |
withinMillis | long | timeout | ãªãã©ã¤ã®ã¿ã¤ã ã¢ã¦ãæéï¼ããªç§ï¼ | ãªãã©ã¤ã®ã¿ã¤ã ã¢ã¦ãæéãè¨å®ãã |
withListener | RetryListener | listener | ãªãã©ã¤ãªã¹ãã¼ | ãªãã©ã¤ãªã¹ãã¼ã追å ãã |
withListeners | List<RetryListener> | listeners | ãªãã©ã¤ãªã¹ãã¼ã®ãªã¹ã | ãªãã©ã¤ãªã¹ãã¼ã追å ãã |
RetryListenerã¨ã¯
ãªãã©ã¤ã«å¦çã追å ããããã®ãªã¹ãã¼ã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ã 以ä¸ã®3ã¤ã®ã¡ã½ãããç¨æããã¦ããã
- void close(RetryContext context, RetryCallback<T,E> callback, Throwable throwable) ï¼æå¾ã®ãªãã©ã¤ã®ãã¨ã«å®è¡ããã
- void onError(RetryContext context, RetryCallback<T,E> callback, Throwable throwable) ï¼ãªãã©ã¤ã失æãããã³ã«å®è¡ããã
- boolean open(RetryContext context, RetryCallback<T,E> callback) ï¼æåã®ãªãã©ã¤ã®åã«å®è¡ããã falseãè¿å´ããå ´åã¯ãªãã©ã¤ããã£ã³ã»ã«ããã
ãªãã©ã¤å¦çã®å®è£
RetryTemplate#executeã®å¼æ°ã«æ¸¡ããå¦çããªãã©ã¤ãããã
ãªãã©ã¤ã®æ¡ä»¶ã¯ãRetryTemplateã®ã¤ã³ã¹ã¿ã³ã¹çææã«æå®ãããã®ã¨ãªãã
å®è£ ä¾
@Slf4j public class SampleClient { private String baseUrl; /** {@link RestTemplate} */ private RestTemplate restTemplate; /** {@link RetryTemplate} */ private RetryTemplate retryTemplate; public SampleClient(String baseUrl, RestTemplateBuilder builder){ this.baseUrl = baseUrl; this.restTemplate = builder .setConnectTimeout(Duration.ofSeconds(3)) .setReadTimeout(Duration.ofSeconds(60)) .build(); this.retryTemplate = RetryTemplate.builder() .maxAttempts(5) .fixedBackoff(100L) .build(); } public <T> ResponseEntity<T> sendRequest(HttpMethod method, String uri, Class<T> responseBodyClass, Map<String, String> queryParam, Object requestBody, HttpHeaders headers) { String baseUri = UriComponentsBuilder .fromHttpUrl(StringUtils.join(baseUrl, uri)) .build() .encode() .toUriString(); UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder .fromHttpUrl(baseUri); if (queryParam != null && !queryParam.isEmpty()) { // ã¯ã¨ãªãã©ã¡ã¼ã¿ä½æ MultiValueMap<String, String> queryParamMap = new LinkedMultiValueMap<>(); queryParamMap.setAll(queryParam); uriComponentsBuilder.queryParams(queryParamMap); } String uriString = uriComponentsBuilder.build().toUriString(); URI requestUri = URI.create(uriString); try { ResponseEntity<T> response = this.retryTemplate.execute(context -> { if (0 < context.getRetryCount()) { log.warn("[ãªãã©ã¤{}åç®] ãªãã©ã¤çç± : {}", context.getRetryCount(), context.getLastThrowable().toString()); } ResponseEntity<T> innerResponse = this.restTemplate.exchange( requestUri, method, new HttpEntity<Object>(requestBody, headers), responseBodyClass); return innerResponse; }); return response; } catch (RestClientResponseException e) { throw e; } } }