Scan for ElasticSearch's @Document type

Closes gh-26028
This commit is contained in:
Stephane Nicoll 2021-04-14 14:42:32 +02:00
parent 517998a829
commit c04d640452
2 changed files with 22 additions and 2 deletions

View File

@ -24,8 +24,11 @@ import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.domain.EntityScanner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
@ -61,9 +64,10 @@ abstract class ElasticsearchDataConfiguration {
@Bean
@ConditionalOnMissingBean
SimpleElasticsearchMappingContext mappingContext(
ElasticsearchCustomConversions elasticsearchCustomConversions) {
SimpleElasticsearchMappingContext mappingContext(ApplicationContext applicationContext,
ElasticsearchCustomConversions elasticsearchCustomConversions) throws ClassNotFoundException {
SimpleElasticsearchMappingContext mappingContext = new SimpleElasticsearchMappingContext();
mappingContext.setInitialEntitySet(new EntityScanner(applicationContext).scan(Document.class));
mappingContext.setSimpleTypeHolder(elasticsearchCustomConversions.getSimpleTypeHolder());
return mappingContext;
}

View File

@ -25,6 +25,8 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
import org.springframework.boot.autoconfigure.data.elasticsearch.city.City;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
@ -105,6 +107,14 @@ class ElasticsearchDataAutoConfigurationTests {
.contains("reactiveElasticsearchTemplate"));
}
@Test
void shouldFilterInitialEntityScanWithDocumentAnnotation() {
this.contextRunner.withUserConfiguration(EntityScanConfig.class).run((context) -> {
SimpleElasticsearchMappingContext mappingContext = context.getBean(SimpleElasticsearchMappingContext.class);
assertThat(mappingContext.hasPersistentEntityFor(City.class)).isTrue();
});
}
@Configuration(proxyBeanMethods = false)
static class CustomElasticsearchCustomConversions {
@ -135,6 +145,12 @@ class ElasticsearchDataAutoConfigurationTests {
}
@Configuration(proxyBeanMethods = false)
@TestAutoConfigurationPackage(City.class)
static class EntityScanConfig {
}
static class MyConverter implements Converter<ElasticsearchRestTemplate, Boolean> {
@Override