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;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -72,6 +73,7 @@ public class ElasticsearchAutoConfiguration implements DisposableBean {
private Releasable releasable; private Releasable releasable;
@Bean @Bean
@ConditionalOnMissingBean
public Client elasticsearchClient() { public Client elasticsearchClient() {
try { try {
return createClient(); 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;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.boot.test.EnvironmentTestUtils;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 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.equalTo;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
/** /**
* Tests for {@link ElasticsearchAutoConfiguration}. * Tests for {@link ElasticsearchAutoConfiguration}.
@ -89,6 +93,17 @@ public class ElasticsearchAutoConfigurationTests {
assertThat(client.settings().get("http.enabled"), is(equalTo("true"))); 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 @Test
public void createTransportClient() throws Exception { public void createTransportClient() throws Exception {
// We don't have a local elasticsearch server so use an address that's missing // We don't have a local elasticsearch server so use an address that's missing
@ -105,4 +120,14 @@ public class ElasticsearchAutoConfigurationTests {
this.context.refresh(); this.context.refresh();
} }
@Configuration
static class CustomConfiguration {
@Bean
public Client myClient() {
return mock(Client.class);
}
}
} }

Loading…
Cancel
Save