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