Spring-boot репозиторий не зарегистрирован как действительный бин - PullRequest
0 голосов
/ 30 ноября 2018

Spring-boot, похоже, не хочет регистрировать мой репозиторий как действительный bean-компонент :( Вот ошибка, которую я вижу:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.frustrated.stats.MyRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Основная причина, по-видимому:

o.s.c.a.ClassPathBeanDefinitionScanner   : Ignored because not a concrete top-level class: file [/Users/me/Code/my_app/my_service/build/classes/java/main/com/frustrated/stats/MyRepository.class]

Я где-то неправильно настроил свое приложение?

Вот мои файлы:

MyRepository.java :

package com.frustrated.stats;

@Repository
public interface MyRepository extends JpaRepository<StatsEvent, Long> {}

StatsEvent.java :

package com.frustrated.stats;

@Entity
public class StatsEvent { ... }

Application.java :

@SpringBootApplication
@ComponentScan(basePackages = { "com.frustrated" })
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@EnableSpringDataWebSupport
public class Application extends SpringBootServletInitializer {

Вот моя структура пакета:

com:
  frustrated:
    - Application.java
    stats:
      - MyRepository.java
      - StatsEvent.java

Попытки отладки

Попробовав множество различных аннотаций, я подумал, что может быть более продуктивно просто пройти через процесс регистрации. Я проследил код, и, похоже,сбой здесь :

    protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
        AnnotationMetadata metadata = beanDefinition.getMetadata();
        return (metadata.isIndependent() && (metadata.isConcrete() ||
            (metadata.isAbstract() && metadata.hasAnnotatedMethods(Lookup.class.getName()))));
}

Это metadata.hasAnnotatedMethods(Lookup.class.getName()) является ложным и приводит к тому, что мой репозиторий не создается как таковой.

Это также может быть примечательночто мой StatsEvent также игнорируется, потому что:

o.s.c.a.ClassPathBeanDefinitionScanner   : Ignored because not matching any filter: file [/Users/me/Code/my_app/my_service/build/classes/java/main/com/frustrated/stats/StatsEvent.class]

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Судя по тому, что MyRepository расширяет JpaRepository, вы пытаетесь использовать Spring Data JPA, но вы исключили автоматическую настройку для Hibernate и DataSource.Если у вас нет какой-либо ручной настройки для Hibernate или другого поставщика JPA, который вы не показали, поддержка JpaRepository будет отключена, поскольку для этого требуется поставщик JPA и источник данных.

0 голосов
/ 30 ноября 2018

Попробуйте добавить это поверх вашего Application.class

@EnableJpaRepositories(basePackages = "com.frustrated.stats.MyRepository")
@ComponentScan("com.frustrated.stats.service") // if you have it
@EntityScan("com.frustrated.stats.entity") // of your entities
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...