X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-ncmp-service%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fcps%2Fncmp%2Fapi%2Fimpl%2Fconfig%2FNcmpConfiguration.java;h=c6ff116a7fb2513784923307240d134dea6f79a2;hb=c8941712a4e34d87617722a642dfe6405eb03a45;hp=3aa17b70cb20ba66607682b5816438bcd85e1c8f;hpb=8c0b1b62c1e88f0c0cc547bbf91d9b236839992b;p=cps.git diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java index 3aa17b70c..c6ff116a7 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/NcmpConfiguration.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation + * Copyright (C) 2021-2023 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,18 +21,33 @@ package org.onap.cps.ncmp.api.impl.config; import java.util.Arrays; +import lombok.AccessLevel; import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.apache.hc.client5.http.config.ConnectionConfig; +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.PoolingHttpClientConnectionManager; +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.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Configuration +@EnableConfigurationProperties(HttpClientConfiguration.class) +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) public class NcmpConfiguration { @Getter @@ -44,18 +59,46 @@ public class NcmpConfiguration { private String authPassword; @Value("${ncmp.dmi.api.base-path}") private String dmiBasePath; + @Value("${ncmp.dmi.auth.enabled}") + private boolean dmiBasicAuthEnabled; } /** * Rest template bean. * * @param restTemplateBuilder the rest template builder + * @param httpClientConfiguration the http client configuration * @return rest template instance */ @Bean - @Scope("singleton") - public static RestTemplate restTemplate(final RestTemplateBuilder restTemplateBuilder) { - final RestTemplate restTemplate = restTemplateBuilder.build(); + @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) + public static RestTemplate restTemplate(final RestTemplateBuilder restTemplateBuilder, + final HttpClientConfiguration httpClientConfiguration) { + + final ConnectionConfig connectionConfig = ConnectionConfig.copy(ConnectionConfig.DEFAULT) + .setConnectTimeout(Timeout.of(httpClientConfiguration.getConnectionTimeoutInSeconds())) + .build(); + + final PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create() + .setDefaultConnectionConfig(connectionConfig) + .setMaxConnTotal(httpClientConfiguration.getMaximumConnectionsTotal()) + .setMaxConnPerRoute(httpClientConfiguration.getMaximumConnectionsPerRoute()) + .build(); + + final CloseableHttpClient httpClient = HttpClients.custom() + .setConnectionManager(connectionManager) + .evictExpiredConnections() + .evictIdleConnections( + TimeValue.of(httpClientConfiguration.getIdleConnectionEvictionThresholdInSeconds())) + .build(); + + final ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); + + final RestTemplate restTemplate = restTemplateBuilder + .requestFactory(() -> requestFactory) + .setConnectTimeout(httpClientConfiguration.getConnectionTimeoutInSeconds()) + .build(); + setRestTemplateMessageConverters(restTemplate); return restTemplate; } @@ -67,4 +110,5 @@ public class NcmpConfiguration { Arrays.asList(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN)); restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter); } + }