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:
parent
f22c91ac94
commit
2e66f17491
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue