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
尝试调试
尝试了许多不同的注释后,我认为简单地完成注册过程可能会更有效率。我已经跟踪了代码,但似乎失败了here:
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]
任何帮助将不胜感激!
答案 0 :(得分:1)
尝试将其添加到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
答案 1 :(得分:1)
根据MyRepository扩展JpaRepository的判断,您正在尝试使用Spring Data JPA,但是您已经排除了Hibernate和DataSource的自动配置。除非您为Hibernate或未提供的其他JPA提供程序进行了一些手动配置,否则将禁用对JpaRepository
的支持,因为它需要JPA提供程序和数据源。