diff --git a/src/main/java/ee/stat/dashboard/DashboardApplication.java b/src/main/java/ee/stat/dashboard/DashboardApplication.java index aea5b1050111904ed095bd5593786f0178d0a2fd..6ecefae16f8a3af84e9cfb83bdd5fcc95373ff19 100644 --- a/src/main/java/ee/stat/dashboard/DashboardApplication.java +++ b/src/main/java/ee/stat/dashboard/DashboardApplication.java @@ -1,21 +1,11 @@ package ee.stat.dashboard; -import ee.stat.dashboard.config.logging.data.ApacheHttpClientInterceptor; -import ee.stat.dashboard.config.logging.meta.RestTemplateInterceptor; -import org.apache.http.HttpRequestInterceptor; -import org.apache.http.HttpResponseInterceptor; -import org.apache.http.client.HttpClient; -import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Profile; -import org.springframework.http.client.BufferingClientHttpRequestFactory; -import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.web.client.RestTemplate; import javax.servlet.Filter; @@ -27,27 +17,11 @@ public class DashboardApplication { SpringApplication.run(DashboardApplication.class, args); } - @Bean - public RestTemplate restTemplate(RestTemplateBuilder builder) { - return builder.interceptors(new RestTemplateInterceptor()) - .requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())) - .build(); - } - - @Bean - public HttpClient httpClient() { - return HttpClientBuilder.create() - .addInterceptorFirst((HttpRequestInterceptor) new ApacheHttpClientInterceptor()) - .addInterceptorFirst((HttpResponseInterceptor) new ApacheHttpClientInterceptor()) - .build(); - } - @Bean public PasswordEncoder encoder() { return new BCryptPasswordEncoder(); } - @Profile("logging") @Bean(name = "TeeFilter") public Filter teeFilter() { diff --git a/src/main/java/ee/stat/dashboard/config/HttpClientConfig.java b/src/main/java/ee/stat/dashboard/config/HttpClientConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..8ad1b5922655884044de4b22d4df5e6d2b76e513 --- /dev/null +++ b/src/main/java/ee/stat/dashboard/config/HttpClientConfig.java @@ -0,0 +1,51 @@ +package ee.stat.dashboard.config; + +import ee.stat.dashboard.config.logging.data.ApacheHttpClientInterceptor; +import ee.stat.dashboard.config.logging.meta.RestTemplateInterceptor; +import ee.stat.dashboard.config.props.HttpClientPropsConfig; +import lombok.AllArgsConstructor; +import org.apache.http.HttpRequestInterceptor; +import org.apache.http.HttpResponseInterceptor; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.impl.client.HttpClientBuilder; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +@Configuration +@AllArgsConstructor +public class HttpClientConfig { + + private HttpClientPropsConfig httpClientPropsConfig; + + @Bean + public HttpClient httpClient() { + if (httpClientPropsConfig.invalidConfig()) throw new RuntimeException("invalid http client config"); + RequestConfig config = RequestConfig.custom() + .setSocketTimeout(httpClientPropsConfig.getReadTimeout()) + .setConnectTimeout(httpClientPropsConfig.getConnectionTimeout()) + .setConnectionRequestTimeout(httpClientPropsConfig.getConnectionRequestTimeout()) + .build(); + return HttpClientBuilder.create() + .addInterceptorFirst((HttpRequestInterceptor) new ApacheHttpClientInterceptor()) + .addInterceptorFirst((HttpResponseInterceptor) new ApacheHttpClientInterceptor()) + .setDefaultRequestConfig(config) + .build(); + } + + @Bean + public RestTemplate restTemplate(RestTemplateBuilder builder) { + if (httpClientPropsConfig.invalidConfig()) throw new RuntimeException("invalid rest template config"); + HttpComponentsClientHttpRequestFactory config = new HttpComponentsClientHttpRequestFactory(); + config.setReadTimeout(httpClientPropsConfig.getReadTimeout()); + config.setConnectTimeout(httpClientPropsConfig.getConnectionTimeout()); + config.setConnectionRequestTimeout(httpClientPropsConfig.getConnectionRequestTimeout()); + return builder.interceptors(new RestTemplateInterceptor()) + .requestFactory(() -> new BufferingClientHttpRequestFactory(config)) + .build(); + } +} diff --git a/src/main/java/ee/stat/dashboard/config/props/HttpClientPropsConfig.java b/src/main/java/ee/stat/dashboard/config/props/HttpClientPropsConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..a41238b60eb6c92acc9d4843dbbd24921afb4c1a --- /dev/null +++ b/src/main/java/ee/stat/dashboard/config/props/HttpClientPropsConfig.java @@ -0,0 +1,21 @@ +package ee.stat.dashboard.config.props; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "app.http") +public class HttpClientPropsConfig { + + private Integer readTimeout; + private Integer connectionTimeout; + private Integer connectionRequestTimeout; + + public boolean invalidConfig() { + return readTimeout == null || connectionTimeout == null || connectionRequestTimeout == null; + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 4dbc0dbf0f70ec6944fe090cdb3a9c002b179dfb..71502bdaad21058def2678d281fd33753de9a6af 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -100,3 +100,7 @@ app: timeEn: Time referenceEt: Vaatlusperiood referenceEn: Reference period + http: + readTimeout: 30000 + connectionTimeout: 30000 + connectionRequestTimeout: 30000 diff --git a/src/test/resources/application.yaml b/src/test/resources/application.yaml index b4cfdc56b0be5fa31c1ebe04bc07217d2088238b..1ddb3983cf8f66513c01dff2c2d2dc5fea9fcc19 100644 --- a/src/test/resources/application.yaml +++ b/src/test/resources/application.yaml @@ -79,3 +79,7 @@ app: timeEn: Time referenceEt: Vaatlusperiood referenceEn: Reference period + http: + readTimeout: 30000 + connectionTimeout: 30000 + connectionRequestTimeout: 30000