Я создаю bean-компонент RestTemplate, который внутри использует класс org.springframework.http.client.HttpComponentsClientHttpRequestFactory.
После перехода на Spring 6 при создании bean-компонента класса HttpComponentsClientHttpRequestFactory я получаю ошибку ниже.
Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Failed to convert property value of type 'java.lang.String' to required type 'java.time.Duration' for property 'connectTimeout'; Cannot convert value of type 'java.lang.String' to required type 'java.time.Duration' for property 'connectTimeout': no matching editors or conversion strategy found
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:135)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:79)
файл context.xml
<bean id = "restTemplate" class = "org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean class = "org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<constructor-arg>
<bean class = "MyHttpClientFactory">
<property name = "keepAliveMS" value = "${keepalive:300000}"/>
</bean>
</constructor-arg>
<property name = "connectTimeout" value = "${connectTimeout:5000}"/>
</bean>
</constructor-arg>
</bean>
Любая помощь приветствуется.
Заранее спасибо.
Я перешел с Spring 5 на Spring 6 и Spring Boot 2 - Springboot 3, используя конфигурацию XML, чтобы добавить другое значение тайм-аута для разных типов вызова отдыха.
Для этого вам не нужна конфигурация XML, вы можете сделать то же самое на Java с гораздо большей легкостью.
ОК, но мне нужно настроить с помощью XML.
Когда вы используете Spring Boot, попробуйте изменить 5000 на 5S и 300000 на 300S или 5M. Я также предполагаю, что вы правильно разрешаете Spring Boot загружать это, а теперь сами взломаете это?
Падение с тем же исключением.




Я обновил свой контекстный файл, как показано ниже:
<bean id = "restTemplate" class = "org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean class = "org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<constructor-arg>
<bean class = "MyHttpClientFactory">
<property name = "keepAliveMS" value = "${keepalive:300000}"/>
</bean>
</constructor-arg>
<property name = "connectTimeout" >
<bean class = "java.time.Duration" factory-method = "ofMillis">
<constructor-arg value = "${connectTimeout:5000}"/>
</bean>
</property>
</bean>
</constructor-arg>
</bean>
Миграция с какой версии? Кроме того, если вы используете Spring Boot, почему у вас есть конфигурация XML, а не Java? В Spring 6 появился
setConnectTimout(Duration), который, как я подозреваю, теперь XML выбирает вместоsetConnectTimeout(int).