Enable non local node Elasticsearch instances

Update ElasticsearchAutoConfiguration to allow `http.enabled` and
`node.local` settings to be specified by ElasticsearchProperties.

Fixes gh-2805
Closes gh-2913
This commit is contained in:
Artur Konczak 2015-05-05 01:07:54 +01:00 committed by Phillip Webb
parent f22c91ac94
commit 2e66f17491
2 changed files with 45 additions and 9 deletions

View File

@ -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<String, String> DEFAULTS;
static {
Map<String, String> defaults = new LinkedHashMap<String, String>();
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<String, String> 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();
}

View File

@ -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