Resttemplate中设置超时时长方式

网友投稿 2131 2022-11-27

Resttemplate中设置超时时长方式

Resttemplate中设置超时时长方式

目录Resttemplate 设置超时时长RestTemplate 设置超时时间注意点

Resttemplate 设置超时时长

为了满足调用需求,需要在使用Resttemplate发送请求时,修改超时时长,网上给出了相关修改方法代码如下:

HttpComponentsClientHttpRequestFactory rf =

((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());

rf.setConnectTimeout(30000);

rf.setReadTimeout(30000);

但是在运行时报错:

org.springframework.http.client.InterceptingClientHttpRequestFactory cannot be cast to org.springframework.http.client.HttpComponentsClientHttpRequestFactory

restTemplate.getRequestFactory()返回的类型无法转换,通过搜索和调试发现,在resttemplate中,必须在设置-之前设置超时,因为在设置-后无法设置超时,而我在设置中并没有设置过-,应该是被默认构造了

所以解决方法如下:

restTemplate.setInterceptors(null);

HttpComponentsClientHttpRequestFactory rf =

((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());

rf.setConnectTimeout(30000);

rf.setReadTimeout(30000);

在设置超时之前,先将-置空,这样就不会出现无法设置的问题,之后验证通过。

查看resttemplate源码后发现,之所以会出现这样的情况是因为在resttemplate的源码中,有这么一段代码:

/**

* Return the request interceptor that this accessor uses.

*/

public List getInterceptors() {

return interceptors;

}

@Override

public ClientHttpRequestFactory getRequestFactory() {

ClientHttpRequestFactory delegate = super.getRequestFactory();

if (!CollectionUtils.isEmpty(getInterceptors())) {

return new InterceptingClientHttpRequestFactory(delegate, getInterceptors());

}

else {

return delegate;

}

}

可以看到,在getRequestFactWOyqpDxUory()函数中,本来应该是返回ClientHttpRequestFactory类型的,但是它会WOyqpDxU先校验一次是否含有interceptors-,如果-非空,则会返回包含-的InterceptingClientHttpRequestFactory,这样是无法转换为HttpComponentsClientHttpRequestFactory类型的,因此在前面处理的时候将-置空,这样就可以返回不含-的所需对象。

RestTemplate 设置超时时间注意点

1、保证系统中只有一个RestTemplate的配置;不然可能与你的预期不一致。

2、永远不要太相信自己写的代码;多打印日志才能真正知道调用时间;

long s = System.currentTimeMillis();

try {

responseEntity = restTemplate.exchange();

} catch (Exception e) {

long costTime = System.currentTimeMillis()-s;

log.error("调用**服务异常,花费时间:{},错误:{}",costTime, e.getMessage(), e);

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:docker | jenkins 自动化CI/CD,后端躺着把运维的钱挣了!(下)
下一篇:浅谈MySQL日志文件|手撕MySQL系列
相关文章

 发表评论

暂时没有评论,来抢沙发吧~