易筋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

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