diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java index 24d91fef597..89a7cb96381 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java @@ -16,6 +16,9 @@ package org.springframework.boot.autoconfigure.elasticsearch; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Properties; import org.apache.commons.logging.Log; @@ -52,6 +55,14 @@ import org.springframework.util.StringUtils; @EnableConfigurationProperties(ElasticsearchProperties.class) public class ElasticsearchAutoConfiguration implements DisposableBean { + private static final Map DEFAULTS; + static { + Map defaults = new LinkedHashMap(); + defaults.put("http.enabled", String.valueOf(false)); + defaults.put("node.local", String.valueOf(true)); + DEFAULTS = Collections.unmodifiableMap(defaults); + } + private static Log logger = LogFactory.getLog(ElasticsearchAutoConfiguration.class); @Autowired @@ -77,11 +88,15 @@ public class ElasticsearchAutoConfiguration implements DisposableBean { } private Client createNodeClient() throws Exception { - ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder() - .put("http.enabled", String.valueOf(false)) - .put(this.properties.getProperties()); + ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder(); + for (Map.Entry entry : DEFAULTS.entrySet()) { + if (!this.properties.getProperties().containsKey(entry.getKey())) { + settings.put(entry.getKey(), entry.getValue()); + } + } + settings.put(this.properties.getProperties()); Node node = new NodeBuilder().settings(settings) - .clusterName(this.properties.getClusterName()).local(true).node(); + .clusterName(this.properties.getClusterName()).node(); this.releasable = node; return node.client(); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java index 80452211f16..3afe4edd55d 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfigurationTests.java @@ -28,7 +28,6 @@ import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @@ -53,7 +52,7 @@ public class ElasticsearchAutoConfigurationTests { } @Test - public void createNodeClient() { + public void createNodeClientWithDefaults() { this.context = new AnnotationConfigApplicationContext(); EnvironmentTestUtils.addEnvironment(this.context, "spring.data.elasticsearch.properties.foo.bar:baz", @@ -63,9 +62,31 @@ public class ElasticsearchAutoConfigurationTests { ElasticsearchAutoConfiguration.class); this.context.refresh(); assertEquals(1, this.context.getBeanNamesForType(Client.class).length); - Client client = this.context.getBean(Client.class); - assertThat(client, instanceOf(NodeClient.class)); - assertThat(((NodeClient) client).settings().get("foo.bar"), is(equalTo("baz"))); + NodeClient client = (NodeClient) this.context.getBean(Client.class); + assertThat(client.settings().get("foo.bar"), is(equalTo("baz"))); + assertThat(client.settings().get("node.local"), is(equalTo("true"))); + assertThat(client.settings().get("http.enabled"), is(equalTo("false"))); + } + + @Test + public void createNodeClientWithOverrides() { + this.context = new AnnotationConfigApplicationContext(); + EnvironmentTestUtils.addEnvironment(this.context, + "spring.data.elasticsearch.properties.foo.bar:baz", + "spring.data.elasticsearch.properties.path.data:target/data", + "spring.data.elasticsearch.properties.path.logs:target/logs", + "spring.data.elasticsearch.properties.node.local:false", + "spring.data.elasticsearch.properties.node.data:true", + "spring.data.elasticsearch.properties.http.enabled:true"); + this.context.register(PropertyPlaceholderAutoConfiguration.class, + ElasticsearchAutoConfiguration.class); + this.context.refresh(); + assertEquals(1, this.context.getBeanNamesForType(Client.class).length); + NodeClient client = (NodeClient) this.context.getBean(Client.class); + assertThat(client.settings().get("foo.bar"), is(equalTo("baz"))); + assertThat(client.settings().get("node.local"), is(equalTo("false"))); + assertThat(client.settings().get("node.data"), is(equalTo("true"))); + assertThat(client.settings().get("http.enabled"), is(equalTo("true"))); } @Test