diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfiguration.java index e96e6cc5b0bc..6064f0f33279 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfiguration.java @@ -16,12 +16,10 @@ package org.springframework.boot.autoconfigure.elasticsearch; -import org.elasticsearch.client.RestClient; -import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.RestClientBuilder; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.RestClientBuilderConfiguration; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.RestClientSnifferConfiguration; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.RestHighLevelClientConfiguration; @@ -38,8 +36,7 @@ */ @SuppressWarnings("deprecation") @Configuration(proxyBeanMethods = false) -@ConditionalOnClass(RestHighLevelClient.class) -@ConditionalOnMissingBean(RestClient.class) +@ConditionalOnClass(RestClientBuilder.class) @EnableConfigurationProperties({ ElasticsearchProperties.class, ElasticsearchRestClientProperties.class, DeprecatedElasticsearchRestClientProperties.class }) @Import({ RestClientBuilderConfiguration.class, RestHighLevelClientConfiguration.class, diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations.java index 93076c457069..0e02b5ec52c1 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations.java @@ -112,7 +112,8 @@ private HttpHost createHttpHost(URI uri) { } @Configuration(proxyBeanMethods = false) - @ConditionalOnMissingBean(RestHighLevelClient.class) + @ConditionalOnClass(RestHighLevelClient.class) + @ConditionalOnMissingBean({ RestHighLevelClient.class, RestClient.class }) static class RestHighLevelClientConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfigurationTests.java index 571e9cc9a207..216f6f07737d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfigurationTests.java @@ -55,6 +55,7 @@ * @author Brian Clozel * @author Vedran Pavic * @author Evgeniy Cheban + * @author Filip Hrisafov */ class ElasticsearchRestClientAutoConfigurationTests { @@ -64,14 +65,22 @@ class ElasticsearchRestClientAutoConfigurationTests { @Test void configureShouldOnlyCreateHighLevelRestClient() { this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(RestClient.class) - .hasSingleBean(RestHighLevelClient.class)); + .hasSingleBean(RestClientBuilder.class).hasSingleBean(RestHighLevelClient.class)); + } + + @Test + void configureWithoutRestHighLevelClientShouldOnlyCreateRestClientBuilder() { + this.contextRunner.withClassLoader(new FilteredClassLoader(RestHighLevelClient.class)) + .run((context) -> assertThat(context).doesNotHaveBean(RestClient.class) + .doesNotHaveBean(RestHighLevelClient.class).hasSingleBean(RestClientBuilder.class)); } @Test void configureWhenCustomRestClientShouldBackOff() { - this.contextRunner.withBean("customRestClient", RestClient.class, () -> mock(RestClient.class)) + this.contextRunner.withUserConfiguration(CustomRestClientConfiguration.class) .run((context) -> assertThat(context).doesNotHaveBean(RestHighLevelClient.class) - .hasSingleBean(RestClient.class).hasBean("customRestClient")); + .hasSingleBean(RestClientBuilder.class).hasSingleBean(RestClient.class) + .hasBean("customRestClient")); } @Test @@ -304,6 +313,16 @@ RestHighLevelClient customRestHighLevelClient1(RestClientBuilder builder) { } + @Configuration(proxyBeanMethods = false) + static class CustomRestClientConfiguration { + + @Bean + RestClient customRestClient(RestClientBuilder builder) { + return builder.build(); + } + + } + @ParameterizedTest @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)