Browse Source

Expose RestClientBuilder when RestHighLevelClient is not available

This commits exposes the RestClientBuilder as a bean even when the
RestHighLevelClient is not available. It allows users to create their
own RestClient beans using the Spring Boot configured RestClientBuilder
when they are not using the RestHighLevelClient.

Fixes gh-28655
pull/28683/head
Filip Hrisafov 4 years ago committed by Brian Clozel
parent
commit
d6bead1a2a
  1. 7
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfiguration.java
  2. 3
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations.java
  3. 25
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfigurationTests.java

7
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfiguration.java

@ -16,12 +16,10 @@ @@ -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 @@ import org.springframework.context.annotation.Import; @@ -38,8 +36,7 @@ import org.springframework.context.annotation.Import;
*/
@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,

3
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientConfigurations.java

@ -112,7 +112,8 @@ class ElasticsearchRestClientConfigurations { @@ -112,7 +112,8 @@ class ElasticsearchRestClientConfigurations {
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(RestHighLevelClient.class)
@ConditionalOnClass(RestHighLevelClient.class)
@ConditionalOnMissingBean({ RestHighLevelClient.class, RestClient.class })
static class RestHighLevelClientConfiguration {
@Bean

25
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchRestClientAutoConfigurationTests.java

@ -55,6 +55,7 @@ import static org.mockito.Mockito.verifyNoInteractions; @@ -55,6 +55,7 @@ import static org.mockito.Mockito.verifyNoInteractions;
* @author Brian Clozel
* @author Vedran Pavic
* @author Evgeniy Cheban
* @author Filip Hrisafov
*/
class ElasticsearchRestClientAutoConfigurationTests {
@ -64,14 +65,22 @@ 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 @@ class ElasticsearchRestClientAutoConfigurationTests { @@ -304,6 +313,16 @@ class ElasticsearchRestClientAutoConfigurationTests {
}
@Configuration(proxyBeanMethods = false)
static class CustomRestClientConfiguration {
@Bean
RestClient customRestClient(RestClientBuilder builder) {
return builder.build();
}
}
@ParameterizedTest
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

Loading…
Cancel
Save