我正在尝试创建项目结构,使我可以通过仅将它们放在类路径中来添加/删除模块。在我的Spring Application中使用@ComponentScan("com.companyname")
批注,它可以从模块中检测并创建带批注的组件。但是尝试在任何地方自动装配CrudRepository时出现错误:
Field repo in com.companyname.somemodule.services.SomeService required a bean of type 'com.companyname.somemodule.repos.SomeRepo' that could not be found.
所以我认为,如果它们在模块之一中定义,可能就无法创建回购协议,因此我不敢再向我的基本SpringApplication中添加测试回购协议,而令我惊讶的是:
Field repo in com.companyname.modularapp.TestService required a bean of type 'com.companyname.modularapp.TestRepo' that could not be found.
然后,我只是删除了我的
@ComponentScan
批注,突然TestRepo达到了我的预期效果,我能够持久地读取Test实体。因此,很明显,ComponentScan要么以某种方式破坏了CrudRepository的创建,要么后来被检测到。我这样定义我的仓库:
@Entity
public class Test {
@Id
private long id;
}
public interface TestRepo extends CrudRepository<Test, Long>{}
我正在这个项目中试用Spring Boot 2.0.0.M7,但我怀疑这是原因。
我错过了什么?
最佳答案
您还可以通过以下方式定义存储库扫描的软件包:
@EnableJpaRepositories("com.companyname")
或在XML配置中
<jpa:repositories base-package="com.companyname"/>
关于java - 使用ComponentScan时Spring找不到CrudRepository bean,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47573791/