易筋SpringBoot 2.1 | 第三十六篇:Spring Boot RestTemplate超时配置示例

本文详细介绍了在SpringBoot中如何使用RestTemplate进行连接超时和读取超时的配置。通过示例展示了如何自定义SimpleClientHttpRequestFactory和HttpComponentsClientHttpRequestFactory来覆盖默认的超时设置,强调了在生产环境中选择使用HttpClient库的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这个spring boot2 RestTemplate超时示例中,学习使用示例在Spring RestTemplate中配置连接超时和读取超时。

1. RestTemplate默认超时

默认情况下,RestTemplate使用SimpleClientHttpRequestFactory取决于默认配置HttpURLConnection。查看类源代码,您将找到它。

// RestTemplate默认超时
private int connectTimeout = -1;
private int readTimeout = -1;

默认情况下,resttemplate使用安装在计算机上的JDK中的timeout属性,该属性始终infinite不被覆盖。要覆盖默认的JVM超时,我们可以在JVM启动期间传递这些属性。

// 覆盖JVM中的默认超时
-Dsun.net.client.defaultConnectTimeout=<TimeoutInMiliSec>
-Dsun.net.client.defaultReadTimeout=<TimeoutInMiliSec>

2. RestTemplate与SimpleClientHttpRequestFactory超时

要以编程方式覆盖超时属性,我们可以如下自定义SimpleClientHttpRequestFactory类。

//Create resttemplate
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
 
//Override timeouts in request factory
private SimpleClientHttpRequestFactory getClientHttpRequestFactory() 
{
    SimpleClientHttpRequestFactory clientHttpRequestFactory
                      = new SimpleClientHttpRequestFactory();
    //Connect timeout
    clientHttpRequestFactory.setConnectTimeout(10_000);
     
    //Read timeout
    clientHttpRequestFactory.setReadTimeout(10_000);
    return clientHttpRequestFactory;
}

3.带有HttpComponentsClientHttpRequestFactory的RestTemplate超时

SimpleClientHttpRequestFactory可以帮助设置超时,但功能非常有限,在实时应用程序中可能不够用。在生产代码,我们可能要使用HttpComponentsClientHttpRequestFactory支持HTTP客户端库resttemplate一起。

HTTPClient提供了其他有用的功能,例如连接池,空闲连接管理等。

阅读更多:Spring RestTemplate + HttpClient配置示例

//Create resttemplate
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
 
//Override timeouts in request factory
private SimpleClientHttpRequestFactory getClientHttpRequestFactory() 
{
    HttpComponentsClientHttpRequestFactory clientHttpRequestFactory
                      = new HttpComponentsClientHttpRequestFactory();
    //Connect timeout
    clientHttpRequestFactory.setConnectTimeout(10_000);
     
    //Read timeout
    clientHttpRequestFactory.setReadTimeout(10_000);
    return clientHttpRequestFactory;
}

4。结论

与远程系统交互时,必须具有超时属性。它们引起的任何性能问题都可能妨碍用户体验,并可能导致整个应用程序崩溃。

在生产代码中,始终选择使用HttpClient库。您可以考虑SimpleClientHttpRequestFactory仅在编写JUnit测试时使用。

请问您有关Spring Boot RestTemplate连接超时示例的问题。

学习愉快!

参考

https://howtodoinjava.com/spring-boot2/resttemplate/resttemplate-timeout-example/

https://segmentfault.com/a/1190000008351806

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值