在這個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