Skip to content

Commit d6bead1

Browse files
filiphrbclozel
authored andcommitted
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
1 parent 6e06e69 commit d6bead1

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@
1616

1717
package org.springframework.boot.autoconfigure.elasticsearch;
1818

19-
import org.elasticsearch.client.RestClient;
20-
import org.elasticsearch.client.RestHighLevelClient;
19+
import org.elasticsearch.client.RestClientBuilder;
2120

2221
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2322
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2523
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.RestClientBuilderConfiguration;
2624
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.RestClientSnifferConfiguration;
2725
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.RestHighLevelClientConfiguration;
@@ -38,8 +36,7 @@
3836
*/
3937
@SuppressWarnings("deprecation")
4038
@Configuration(proxyBeanMethods = false)
41-
@ConditionalOnClass(RestHighLevelClient.class)
42-
@ConditionalOnMissingBean(RestClient.class)
39+
@ConditionalOnClass(RestClientBuilder.class)
4340
@EnableConfigurationProperties({ ElasticsearchProperties.class, ElasticsearchRestClientProperties.class,
4441
DeprecatedElasticsearchRestClientProperties.class })
4542
@Import({ RestClientBuilderConfiguration.class, RestHighLevelClientConfiguration.class,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ private HttpHost createHttpHost(URI uri) {
112112
}
113113

114114
@Configuration(proxyBeanMethods = false)
115-
@ConditionalOnMissingBean(RestHighLevelClient.class)
115+
@ConditionalOnClass(RestHighLevelClient.class)
116+
@ConditionalOnMissingBean({ RestHighLevelClient.class, RestClient.class })
116117
static class RestHighLevelClientConfiguration {
117118

118119
@Bean

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
* @author Brian Clozel
5656
* @author Vedran Pavic
5757
* @author Evgeniy Cheban
58+
* @author Filip Hrisafov
5859
*/
5960
class ElasticsearchRestClientAutoConfigurationTests {
6061

@@ -64,14 +65,22 @@ class ElasticsearchRestClientAutoConfigurationTests {
6465
@Test
6566
void configureShouldOnlyCreateHighLevelRestClient() {
6667
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(RestClient.class)
67-
.hasSingleBean(RestHighLevelClient.class));
68+
.hasSingleBean(RestClientBuilder.class).hasSingleBean(RestHighLevelClient.class));
69+
}
70+
71+
@Test
72+
void configureWithoutRestHighLevelClientShouldOnlyCreateRestClientBuilder() {
73+
this.contextRunner.withClassLoader(new FilteredClassLoader(RestHighLevelClient.class))
74+
.run((context) -> assertThat(context).doesNotHaveBean(RestClient.class)
75+
.doesNotHaveBean(RestHighLevelClient.class).hasSingleBean(RestClientBuilder.class));
6876
}
6977

7078
@Test
7179
void configureWhenCustomRestClientShouldBackOff() {
72-
this.contextRunner.withBean("customRestClient", RestClient.class, () -> mock(RestClient.class))
80+
this.contextRunner.withUserConfiguration(CustomRestClientConfiguration.class)
7381
.run((context) -> assertThat(context).doesNotHaveBean(RestHighLevelClient.class)
74-
.hasSingleBean(RestClient.class).hasBean("customRestClient"));
82+
.hasSingleBean(RestClientBuilder.class).hasSingleBean(RestClient.class)
83+
.hasBean("customRestClient"));
7584
}
7685

7786
@Test
@@ -304,6 +313,16 @@ RestHighLevelClient customRestHighLevelClient1(RestClientBuilder builder) {
304313

305314
}
306315

316+
@Configuration(proxyBeanMethods = false)
317+
static class CustomRestClientConfiguration {
318+
319+
@Bean
320+
RestClient customRestClient(RestClientBuilder builder) {
321+
return builder.build();
322+
}
323+
324+
}
325+
307326
@ParameterizedTest
308327
@Target(ElementType.METHOD)
309328
@Retention(RetentionPolicy.RUNTIME)

0 commit comments

Comments
 (0)