我创建了一个用于在多个 Spring Boot 应用程序上共享代码的库。
该库包含一个 Repository 类RequestRepository
。将库添加到 Spring Boot 项目后,编译并成功运行单元测试。
// Library: RequestRepository.java
package org.test.lib;
public interface RequestRepository extends CrudRepository<Request, Integer> {}
// Application: Application.java
package org.test.app;
@SpringBootApplication
@ComponentScan(basePackages = {"org.test.app", "org.test.lib"})
public class Application {
// ...
}
启动应用程序会引发NoSuchBeanDefinitionException
当 Spring 尝试自动装配存储库时。
造成原因:org.springframework.beans.factory.NoSuchBeanDefinitionException
: 不
类型为 ' 的限定 beanorg.test.lib.repositories.RequestRepository
'
可用:预计至少有 1 个符合自动装配资格的 bean
候选人。依赖注释:{}
我为组件扫描启用了 DEBUG 日志记录,并获得了有关存储库的以下输出。
2018-07-10 08:33:25.035 调试 14976 --- [ 主要]
.i.s.PathMatchingResourcePatternResolver :解析的位置模式
[classpath*:org/test/lib/**/*.class] 到资源 [URL
[jar:文件:/C:/Users/.../lib-request-1.0.0-SNAPSHOT.jar!/org/test/lib/repositories/RequestRepository.class],
...
我错过了什么?
您必须在 Spring Boot 应用程序之外启用存储库@EnableJpaRepositories
明确地。
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"org.test.app", "org.test.lib"})
@ComponentScan(basePackages = {"org.test.app", "org.test.lib"})
public class Application {
// ...
}
See 弹簧导轨 https://spring.io/guides/gs/accessing-data-jpa.
默认情况下,Spring Boot 将启用 JPA 存储库支持并查看
包(及其子包)其中@SpringBootApplication
是
位于。如果您的配置有 JPA 存储库接口
位于包中的定义不可见,您可以指出
替代包使用@EnableJpaRepositories
及其类型安全basePackageClasses=MyRepository.class
范围。
用于使用@Entity
库集中的类@EntityScan
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)