NoSuchBeanDefinitionException: при использовании автоконфигурации не доступен bean-компонент с именем «elasticsearchTemplate» - PullRequest
0 голосов
/ 17 июня 2020

Я хочу использовать ElasticSearch и Spring Data. Я добавил эти зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

Я хочу использовать автоконфигурацию. Я следую этому do c: https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot -features-connected-to-elasticsearch-rest

If you have the org.elasticsearch.client:elasticsearch-rest-high-level-client 
dependency on the classpath, Spring Boot will auto-configure a RestHighLevelClient

Я создал репозиторий:

@Repository
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {

    Page<Article> findByAuthorsName(String name, Pageable pageable);
}

I добавил это, но теперь он работает!

Я получаю сообщение об ошибке после запуска приложения:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating 
bean with name 'articleRepository' defined in com.example.elasticsearch.repository.ArticleRepository defined in @EnableElasticsearchRepositories declared on Config: 
Cannot resolve reference to bean 'elasticsearchTemplate' while setting bean property 'elasticsearchOperations'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'elasticsearchTemplate' available
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)

Но почему это происходит? Я хочу использовать автоконфигурацию, я не хочу вручную описывать beans, как сказано в других ответах на stackoverflow!

Я использую Spring boot 2.3.1.RELEASE и Java 11

РЕДАКТИРОВАТЬ :

Моя конфигурация:

@Configuration
@EnableElasticsearchRepositories(basePackages = " com.example.elasticsearch.repository")
public class Config {
}

Мое приложение:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Я попытался воспроизвести вашу настройку локально, и все работает нормально.

Как указано в комментариях к вопросу, я включил вывод отладки, чтобы получить отчет автоконфигурации для моего приложения, и я получаю :

   ElasticsearchDataAutoConfiguration matched:
      - @ConditionalOnClass found required class 'org.springframework.data.elasticsearch.core.ElasticsearchTemplate' (OnClassCondition)

   ElasticsearchDataConfiguration.BaseConfiguration#elasticsearchConverter matched:
      - @ConditionalOnMissingBean (types: org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; SearchStrategy: all) did not find any beans (OnBeanCondition)

   ElasticsearchDataConfiguration.BaseConfiguration#mappingContext matched:
      - @ConditionalOnMissingBean (types: org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; SearchStrategy: all) did not find any beans (OnBeanCondition)

   ElasticsearchDataConfiguration.RestClientConfiguration matched:
      - @ConditionalOnClass found required class 'org.elasticsearch.client.RestHighLevelClient' (OnClassCondition)

   ElasticsearchDataConfiguration.RestClientConfiguration#elasticsearchTemplate matched:
      - @ConditionalOnBean (types: org.elasticsearch.client.RestHighLevelClient; SearchStrategy: all) found bean 'elasticsearchRestHighLevelClient'; @ConditionalOnMissingBean (names: elasticsearchTemplate types: org.springframework.data.elasticsearch.core.ElasticsearchOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)

ElasticsearchRestTemplate создается Spring Boot, как и ожидалось. Обновите свой вопрос, указав запрашиваемую информацию.

0 голосов
/ 17 июня 2020

Автоконфигурация предполагает несколько вещей для настройки вашего контекста, однако вам все равно нужно подключить bean-компонент к вашему классу для работы с ним.

Убедитесь, что все ваши зависимости импортированы как часть вашей сборки, а затем выполните обязательно подключите bean-компонент шаблона поиска elasti c к вашему классу.

Если проблема все еще возникает, вы можете опубликовать свой курс, чтобы лучше понять.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...