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
This commit is contained in:
parent
dd163edc92
commit
fb4cc718c2
|
|
@ -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 {
|
|||
private Releasable releasable;
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public Client elasticsearchClient() {
|
||||
try {
|
||||
return createClient();
|
||||
|
|
|
|||
|
|
@ -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 {
|
|||
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 {
|
|||
this.context.refresh();
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class CustomConfiguration {
|
||||
|
||||
@Bean
|
||||
public Client myClient() {
|
||||
return mock(Client.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue