From eacb9273e33ba7df3d1a4499e333a59a06c4c550 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 17 Sep 2021 11:59:06 +0100 Subject: [PATCH] Polish property mapping in reactive Elastic REST client auto-config Closes gh-28038 --- ...sticsearchRestClientAutoConfiguration.java | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveElasticsearchRestClientAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveElasticsearchRestClientAutoConfiguration.java index 9efb2fa8bf..b690d5d4ba 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveElasticsearchRestClientAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveElasticsearchRestClientAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient; import org.springframework.data.elasticsearch.client.reactive.ReactiveRestClients; -import org.springframework.http.HttpHeaders; import org.springframework.util.unit.DataSize; import org.springframework.web.reactive.function.client.ExchangeStrategies; import org.springframework.web.reactive.function.client.WebClient; @@ -50,36 +49,25 @@ public class ReactiveElasticsearchRestClientAutoConfiguration { public ClientConfiguration clientConfiguration(ReactiveElasticsearchRestClientProperties properties) { ClientConfiguration.MaybeSecureClientConfigurationBuilder builder = ClientConfiguration.builder() .connectedTo(properties.getEndpoints().toArray(new String[0])); - if (properties.isUseSsl()) { - builder.usingSsl(); - } - configureTimeouts(builder, properties); - configureExchangeStrategies(builder, properties); + PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); + map.from(properties.isUseSsl()).whenTrue().toCall(builder::usingSsl); + map.from(properties.getUsername()).whenHasText() + .to((username) -> builder.withBasicAuth(username, properties.getPassword())); + map.from(properties.getConnectionTimeout()).to(builder::withConnectTimeout); + map.from(properties.getSocketTimeout()).to(builder::withSocketTimeout); + configureExchangeStrategies(map, builder, properties); return builder.build(); } - private void configureTimeouts(ClientConfiguration.TerminalClientConfigurationBuilder builder, + private void configureExchangeStrategies(PropertyMapper map, + ClientConfiguration.TerminalClientConfigurationBuilder builder, ReactiveElasticsearchRestClientProperties properties) { - PropertyMapper map = PropertyMapper.get(); - map.from(properties.getConnectionTimeout()).whenNonNull().to(builder::withConnectTimeout); - map.from(properties.getSocketTimeout()).whenNonNull().to(builder::withSocketTimeout); - map.from(properties.getUsername()).whenHasText().to((username) -> { - HttpHeaders headers = new HttpHeaders(); - headers.setBasicAuth(username, properties.getPassword()); - builder.withDefaultHeaders(headers); - }); - } - - private void configureExchangeStrategies(ClientConfiguration.TerminalClientConfigurationBuilder builder, - ReactiveElasticsearchRestClientProperties properties) { - PropertyMapper map = PropertyMapper.get(); - builder.withWebClientConfigurer((webClient) -> { - ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder() - .codecs((configurer) -> map.from(properties.getMaxInMemorySize()).whenNonNull() - .asInt(DataSize::toBytes) - .to((maxInMemorySize) -> configurer.defaultCodecs().maxInMemorySize(maxInMemorySize))) - .build(); - return webClient.mutate().exchangeStrategies(exchangeStrategies).build(); + map.from(properties.getMaxInMemorySize()).asInt(DataSize::toBytes).to((maxInMemorySize) -> { + builder.withWebClientConfigurer((webClient) -> { + ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder() + .codecs((configurer) -> configurer.defaultCodecs().maxInMemorySize(maxInMemorySize)).build(); + return webClient.mutate().exchangeStrategies(exchangeStrategies).build(); + }); }); }