I am facing issue when I try to migrate to SpringBoot 3 from Spring Boot 2.
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Proxy.Type;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpHost;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.SocketConfig;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
@RefreshScope
public class RestTemplateConfig{
int timeout=10000;
int readTimeout=10000;
int retryCount=3;
int timeToLive=5000;
String rProxy=proxy.test.com;
String rPort=80;
public RestTemplate restTemplate() {
return new RestTemplate(getClientHttpRequestFactory());
}
private ClientHttpRequestFactory getClientHttpRequestFactory() {
Httphost proxy new HttpHost(rProxy, Integer.parseInt(rPort));
SocketConfig socketConfig=SocketConfig.custom()
.setSoTimeout(timeout)
.build();
RequestConfig requestConfig=RequestConfig.custom()
.setConnectionRequestTimeout(timeout)
.setConnectTimeout(timeout)
.setSocketTimeout(timeout)
.build();
HttpClient httpClient=HttpClients.custom().setProxy(proxy)
.setDefaultSocketConfig(socketConfig)
.setDefaultRequestConfig(requestConfig)
.setRetryHandler(new DefaultHttpRequestRetryHandler(retryCount, true))
.setConnectionTimeToLive(timeToLive, TimeUnit.MILLISECONDS)
.build();
HttpComponentsClientHttpRequestFactory rf=new HttpComponentsClientHttpRequestFactory(httpClient):
rf.setConnectTimeout(timeout); rf.setReadTimeout(readTimeout);
rf.setConnectionRequestTimeout(timeout);
return rf;
}
I am getting error:
The constructor HttpComponsentsClientHttpRequestFactory(HttpClient) is undefined.
It seems in SpringBoot3 HttpComponsentsClientHttpRequestFactory constructor only takes org.apache.hc.client5.http.classic.HttpClient
I made the following changes [Changed the classes to httpClient5]:
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.HttpHost;
import org.apache.hc.client5.http.impl.classic.HttpClients;
But getting error:
The method setDefaultSocketConfig(SocketConfig) is undefined for the type HttpClientBuilder
HttpClient httpClient=HttpClients.custom().setProxy(proxy)
.setDefaultSocketConfig(socketConfig)
.setDefaultRequestConfig(requestConfig)
.setRetryHandler(new DefaultHttpRequestRetryHandler(retryCount, true))
.setConnectionTimeToLive(timeToLive, TimeUnit.MILLISECONDS)
.build();
Is there any equivalent method to setDefaultSocketConfig or any other way I can attain same functionality?
You can create a
ConnectionManagerwith theSocketConfigand pass thatConnectionManagerto theHttpClientBuilderyou are using. For example,and then,
You can also set the
timeToLivein aConnectionConfigand pass that toConnectionManageras well, likeThen,
You can pass this
ConnectionManagerto theHttpClientBuilder, the same way as we did before.