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:
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user