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
This commit is contained in:
committed by
Brian Clozel
parent
6e06e69bba
commit
d6bead1a2a
@@ -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;
|
||||
*/
|
||||
@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,
|
||||
|
||||
@@ -112,7 +112,8 @@ class ElasticsearchRestClientConfigurations {
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnMissingBean(RestHighLevelClient.class)
|
||||
@ConditionalOnClass(RestHighLevelClient.class)
|
||||
@ConditionalOnMissingBean({ RestHighLevelClient.class, RestClient.class })
|
||||
static class RestHighLevelClientConfiguration {
|
||||
|
||||
@Bean
|
||||
|
||||
@@ -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 {
|
||||
@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 {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class CustomRestClientConfiguration {
|
||||
|
||||
@Bean
|
||||
RestClient customRestClient(RestClientBuilder builder) {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
|
||||
Reference in New Issue
Block a user