记-RestTemplate连接超时时间设置不生效问题
一、前言
springboot 2.x默认不再向容器中注入
RestTemplate
对象,需要使用者根据RestTemplateBuilder
手动配置RestTemplate
对象;但是RestTemplateBuilder
有些奇葩,大部分赋值方法都会创建新的RestTemplateBuilder
实例!!!这不合常规啊,不清楚的很容易用错,导致设置的属性不生效。真的🐶
各位大佬有谁知道,
RestTemplateBuilder
为什么这么做的,烦请留言告知下?
二、错误示例
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
builder.setConnectTimeout(Duration.ofSeconds(10));
builder.setReadTimeout(Duration.ofSeconds(120));
return builder.build();
}
三、正确用法
/**
* @see org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration
*/
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
final RestTemplateBuilder restTemplateBuilder = builder.setConnectTimeout(Duration.ofSeconds(10)).setReadTimeout(Duration.ofSeconds(120));
final RestTemplate restTemplate = restTemplateBuilder.build();
return restTemplate;
}
四、RestTemplateCustomizer个性化配置示例
@Bean
public RestTemplateCustomizer restTemplateCustomizer() {
return restTemplate -> restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
}