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

在这个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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章