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