配置RestTemplate 请求超时设置

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    builder.setConnectTimeout(10000);
    builder.setReadTimeout(30000);
    return builder.build();

以上注入写法无效设置RestTemplate无效导致线程死锁
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nx5v9wav-1599911315155)(en-resource://database/1239:1)]

一下方式设置超时有效,但是引发另外一个时间序列化问题。

@Bean
public RestTemplate restTemplate()
    SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
    simpleClientHttpRequestFactory.setConnectTimeout(10000);
    simpleClientHttpRequestFactory.setReadTimeout(30000);
    return new RestTemplate(simpleClientHttpRequestFactory);

时间序列化问题:

15:27:24.809 [http-nio-8000-exec-48] ERROR c.w.s.ConcentrationPackageService - 错误信息:org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize value of type java.util.Date from String "2019-07-18 14:39:21": not a valid representation (error: Failed to parse Date value '2019-07-18 14:39:21': Can not parse date "2019-07-18 14:39:21Z": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSS'Z'', parsing fails (leniency? null))
 at [Source: java.io.PushbackInputStream@7e22e3b9; line: 1, column: 212] (through reference chain: com.github.pagehelper.PageInfo["list"]->java.util.ArrayList[0]->cn.wingsing.dto.outbound.order.ConcentrationPackageSpec["createdate"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String "2019-07-18 14:39:21": not a valid representation (error: Failed to parse Date value '2019-07-18 14:39:21': Can not parse date "2019-07-18 14:39:21Z": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSS'Z'', parsing fails (leniency? null))

彻底解决以上两个问题方式

@Bean
@ConfigurationProperties(prefix = "custom.rest.connection")
public HttpComponentsClientHttpRequestFactory customHttpRequestFactory() {
	return new HttpComponentsClientHttpRequestFactory();
@Bean
public RestTemplate restTemplate(){
	RestTemplate restTemplate = new RestTemplate(customHttpRequestFactory());
	MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
	messageConverter.setPrettyPrint(false);
	messageConverter.setObjectMapper(objectMapper);
	restTemplate.getMessageConverters().removeIf(m -> m.getClass().getName().equals(MappingJackson2HttpMessageConverter.class.getName()));
	restTemplate.getMessageConverters().add(messageConverter);
	return restTemplate;
                                    通过日志看到A在调用B时出现阻塞,直到timeout,打印出线程堆栈查看:线程阻塞在AbstractConnPool类getPoolEntryBlocking方法中try {//根据route获取route对应的连接池 final RouteSpecificPool < T , C , E > pool = getPool(route);E entry;for(;;) {for(;;) {//获取可用的连接 entry = pool . getFree(state);
                                    作者:duanxzcnblogs.com/duanxz/p/3510622.html在微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以...
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    @Bean
                                    在使用SpringBoot时不能自动注入RestTemplate,具体报错信息如下
Field restTemplate in 'xxx' required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.
The injection point has the following annotations:
	- @org.springframework.beans.factory.a
//将restTemplate注入spring容器
@Bean("restTemplate")
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        RestTemplate restTemplate = builder.bu...
                                    记-RestTemplate连接超时时间设置不生效问题
文章目录记-RestTemplate连接超时时间设置不生效问题一、前言二、错误示例三、正确用法四、RestTemplateCustomizer个性化配置示例
springboot 2.x默认不再向容器中注入RestTemplate对象,需要使用者根据RestTemplateBuilder手动配置RestTemplate对象;但是RestTemplateBuilder有些奇葩,大部分赋值方法都会创建新的RestTemplateBuilder实
                                    很多项目中都有需要调用第三方接口,通过httpclient来发送消息,这种方式往往设计网络IO,每次调用的时候都需要建立http连接,而http连接需要经过三次握手等,是非常耗时的;
                                    setConnectTimeout 设定连接超时。从你发起建立连接请求到连接建立前的时间。
setReadTimeout 设定读取超时。连接建立后,发起request到收到response的时间。这个要慎重,如果你设置了超时,上游最后又把数据response给你了,可能出现你和上游的数据不一致。
restTemplateBuilder方式已经被废弃
restTemplateBuilder的方式被...
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpResponse;
@SpringBootApplication
@Slf4j
public class CustomerServiceApplication implements ApplicationRunner {
	@Autowired
	private RestTemplate restTemplate;
	public static void main(String[] args) {
		new SpringApplicationBuilder()
                                    新建restTemplate实例可以直接new也可以使用springboot提供的RestTemplateBuilder。
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
	return builder.build();
restTemplate有很多的方法,postForObject,postForEntity等,这些是直接调用的,如:
Coffee coffee = restTemplate.postFor