gpt4 book ai didi

Spring RestTemplate 超时

转载 作者:IT老高 更新时间:2023-10-28 13:01:10 35 4
gpt4 key购买 nike

我想为我的 Web 应用程序使用的休息服务设置连接超时。我正在使用 Spring 的 RestTemplate 与我的服务交谈。我做了一些研究,发现并使用了下面的 xml(在我的应用程序 xml 中),我相信它是为了设置超时。我正在使用 Spring 3.0。

我在这里也看到了同样的问题 Timeout configuration for spring webservices with RestTemplate但解决方案似乎不是干净,我更愿意通过 Spring config 设置超时值

<bean id="RestOperations" class="org.springframework.web.client.RestTemplate">
<constructor-arg>

<bean class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<property name="readTimeout" value="${restURL.connectionTimeout}" />
</bean>
</constructor-arg>
</bean>

似乎无论我将 readTimeout 设置为什么,我都会得到以下信息:

网线断开:等待大约 20 秒并报告以下异常:

org.springframework.web.client.ResourceAccessException: I/O error: No route to host: connect; nested exception is java.net.NoRouteToHostException: No route to host: connect

Url 不正确,rest 服务返回 404:等待大约 10 秒并报告以下异常:

org.springframework.web.client.HttpClientErrorException: 404 Not Found

我的要求需要更短的超时,所以我需要能够更改这些。关于我做错了什么有什么想法吗?

非常感谢。

最佳答案

对于 Spring Boot >= 1.4

@Configuration
public class AppConfig
{
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder)
{
return restTemplateBuilder
.setConnectTimeout(...)
.setReadTimeout(...)
.build();
}
}

对于 Spring Boot <= 1.3

@Configuration
public class AppConfig
{
@Bean
@ConfigurationProperties(prefix = "custom.rest.connection")
public HttpComponentsClientHttpRequestFactory customHttpRequestFactory()
{
return new HttpComponentsClientHttpRequestFactory();
}

@Bean
public RestTemplate customRestTemplate()
{
return new RestTemplate(customHttpRequestFactory());
}
}

然后在你的 application.properties

custom.rest.connection.connection-request-timeout=...
custom.rest.connection.connect-timeout=...
custom.rest.connection.read-timeout=...

这是因为 HttpComponentsClientHttpRequestFactory 有公共(public) setter connectionRequestTimeoutconnectTimeoutreadTimeout@ConfigurationProperties 为您设置它们。


对于没有 Spring Boot 的 Spring 4.1 或 Spring 5 使用 @Configuration 而不是 XML

@Configuration
public class AppConfig
{
@Bean
public RestTemplate customRestTemplate()
{
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(...);
httpRequestFactory.setConnectTimeout(...);
httpRequestFactory.setReadTimeout(...);

return new RestTemplate(httpRequestFactory);
}
}

关于Spring RestTemplate 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13837012/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com