Add config prop to enabled/disable Elasticsearch sniffer

Closes gh-47301

Co-Authored-By: Andy Wilkinson <andy.wilkinson@broadcom.com>
This commit is contained in:
Phillip Webb 2025-09-22 19:24:21 -07:00 committed by Andy Wilkinson
parent 3a9ab15696
commit dc341edfdd
4 changed files with 23 additions and 0 deletions

View File

@ -350,6 +350,8 @@ spring:
delay-after-failure: "30s" 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]] [[data.nosql.elasticsearch.connecting-using-rest.javaapiclient]]

View File

@ -160,6 +160,11 @@ public class ElasticsearchProperties {
public static class Sniffer { public static class Sniffer {
/**
* Whether the sniffer is enabled.
*/
private boolean enabled = true;
/** /**
* Interval between consecutive ordinary sniff executions. * Interval between consecutive ordinary sniff executions.
*/ */
@ -170,6 +175,14 @@ public class ElasticsearchProperties {
*/ */
private Duration delayAfterFailure = Duration.ofMinutes(1); private Duration delayAfterFailure = Duration.ofMinutes(1);
public boolean isEnabled() {
return this.enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public Duration getInterval() { public Duration getInterval() {
return this.interval; return this.interval;
} }

View File

@ -47,6 +47,7 @@ import org.jspecify.annotations.Nullable;
import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 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.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchConnectionDetails.Node; import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchConnectionDetails.Node;
@ -138,6 +139,7 @@ class ElasticsearchRestClientConfigurations {
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Sniffer.class) @ConditionalOnClass(Sniffer.class)
@ConditionalOnSingleCandidate(Rest5Client.class) @ConditionalOnSingleCandidate(Rest5Client.class)
@ConditionalOnProperty(name = "spring.elasticsearch.restclient.sniffer.enabled", matchIfMissing = true)
static class RestClientSnifferConfiguration { static class RestClientSnifferConfiguration {
@Bean @Bean

View File

@ -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 @Test
void definesPropertiesBasedConnectionDetailsByDefault() { void definesPropertiesBasedConnectionDetailsByDefault() {
this.contextRunner this.contextRunner