Browse Source

Reuse existing ElasticSearch client

Instead of always creating a new ElasticSearch client, we now check for
the presence of a custom bean configuration and use that if it's
available.

Closes gh-4143
Closes gh-4146
pull/4140/merge
Stephane Nicoll 10 years ago
parent
commit
fb4cc718c2
  1. 2
      spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfiguration.java
  2. 25
      spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfigurationTests.java

2
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfiguration.java

@ -32,6 +32,7 @@ import org.elasticsearch.node.NodeBuilder; @@ -32,6 +32,7 @@ import org.elasticsearch.node.NodeBuilder;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -72,6 +73,7 @@ public class ElasticsearchAutoConfiguration implements DisposableBean { @@ -72,6 +73,7 @@ public class ElasticsearchAutoConfiguration implements DisposableBean {
private Releasable releasable;
@Bean
@ConditionalOnMissingBean
public Client elasticsearchClient() {
try {
return createClient();

25
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfigurationTests.java

@ -26,11 +26,15 @@ import org.springframework.beans.factory.BeanCreationException; @@ -26,11 +26,15 @@ import org.springframework.beans.factory.BeanCreationException;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.test.EnvironmentTestUtils;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link ElasticsearchAutoConfiguration}.
@ -89,6 +93,17 @@ public class ElasticsearchAutoConfigurationTests { @@ -89,6 +93,17 @@ public class ElasticsearchAutoConfigurationTests {
assertThat(client.settings().get("http.enabled"), is(equalTo("true")));
}
@Test
public void useExistingClient() {
this.context = new AnnotationConfigApplicationContext();
this.context.register(CustomConfiguration.class,
PropertyPlaceholderAutoConfiguration.class,
ElasticsearchAutoConfiguration.class);
this.context.refresh();
assertEquals(1, this.context.getBeanNamesForType(Client.class).length);
assertSame(this.context.getBean("myClient"), this.context.getBean(Client.class));
}
@Test
public void createTransportClient() throws Exception {
// We don't have a local elasticsearch server so use an address that's missing
@ -105,4 +120,14 @@ public class ElasticsearchAutoConfigurationTests { @@ -105,4 +120,14 @@ public class ElasticsearchAutoConfigurationTests {
this.context.refresh();
}
@Configuration
static class CustomConfiguration {
@Bean
public Client myClient() {
return mock(Client.class);
}
}
}

Loading…
Cancel
Save