47 lines
1.9 KiB
Java
47 lines
1.9 KiB
Java
package com.billpaymentservice.bbps.config;
|
|
|
|
import org.apache.hc.client5.http.config.RequestConfig;
|
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
|
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
|
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
|
|
import org.apache.hc.core5.util.TimeValue;
|
|
import org.apache.hc.core5.util.Timeout;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
@Configuration
|
|
public class RestTemplateConfig {
|
|
|
|
@Bean
|
|
public RestTemplate restTemplate() {
|
|
// ✅ Timeout config
|
|
RequestConfig requestConfig = RequestConfig.custom()
|
|
.setConnectionRequestTimeout(Timeout.ofSeconds(5)) // pool wait
|
|
.setConnectTimeout(Timeout.ofSeconds(5)) // TCP connect
|
|
.setResponseTimeout(Timeout.ofSeconds(10)) // response read
|
|
.build();
|
|
|
|
// ✅ Connection pool manager (HttpClient5 style)
|
|
var connManager = PoolingHttpClientConnectionManagerBuilder.create()
|
|
.setMaxConnTotal(200)
|
|
.setMaxConnPerRoute(50)
|
|
.build();
|
|
|
|
// ✅ Build HttpClient
|
|
CloseableHttpClient httpClient = HttpClients.custom()
|
|
.setDefaultRequestConfig(requestConfig)
|
|
.setConnectionManager(connManager)
|
|
.disableAutomaticRetries()
|
|
.evictExpiredConnections()
|
|
.evictIdleConnections(TimeValue.ofSeconds(30))
|
|
.build();
|
|
|
|
// ✅ Bind RestTemplate with HttpClient
|
|
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
|
factory.setBufferRequestBody(true);
|
|
|
|
return new RestTemplate(factory);
|
|
}
|
|
} |