diff --git a/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/data/nosql.adoc b/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/data/nosql.adoc index 42cffeb814e..23a64919f1e 100644 --- a/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/data/nosql.adoc +++ b/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/data/nosql.adoc @@ -350,6 +350,8 @@ spring: delay-after-failure: "30s" ---- +To disable auto-configuration of the Sniffer, set configprop:spring.elasticsearch.restclient.sniffer.enabled[] to `false`. + [[data.nosql.elasticsearch.connecting-using-rest.javaapiclient]] diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java index 1c5143cbe3c..edca72a7bae 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java @@ -160,6 +160,11 @@ public class ElasticsearchProperties { public static class Sniffer { + /** + * Whether the sniffer is enabled. + */ + private boolean enabled = true; + /** * Interval between consecutive ordinary sniff executions. */ @@ -170,6 +175,14 @@ public class ElasticsearchProperties { */ private Duration delayAfterFailure = Duration.ofMinutes(1); + public boolean isEnabled() { + return this.enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + public Duration getInterval() { return this.interval; } diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java index f9fe2f2401a..44da46d9a20 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java @@ -47,6 +47,7 @@ import org.jspecify.annotations.Nullable; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchConnectionDetails.Node; @@ -138,6 +139,7 @@ class ElasticsearchRestClientConfigurations { @Configuration(proxyBeanMethods = false) @ConditionalOnClass(Sniffer.class) @ConditionalOnSingleCandidate(Rest5Client.class) + @ConditionalOnProperty(name = "spring.elasticsearch.restclient.sniffer.enabled", matchIfMissing = true) static class RestClientSnifferConfiguration { @Bean diff --git a/module/spring-boot-elasticsearch/src/test/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientAutoConfigurationTests.java b/module/spring-boot-elasticsearch/src/test/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientAutoConfigurationTests.java index 64e07a15532..6b1b3c15320 100644 --- a/module/spring-boot-elasticsearch/src/test/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientAutoConfigurationTests.java +++ b/module/spring-boot-elasticsearch/src/test/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientAutoConfigurationTests.java @@ -295,6 +295,12 @@ class ElasticsearchRestClientAutoConfigurationTests { }); } + @Test + void configureWithSnifferDisabled() { + this.contextRunner.withPropertyValues("spring.elasticsearch.restclient.sniffer.enabled=false") + .run((context) -> assertThat(context).doesNotHaveBean(Sniffer.class)); + } + @Test void definesPropertiesBasedConnectionDetailsByDefault() { this.contextRunner