我正在尝试创建项目结构,使我可以通过仅将它们放在类路径中来添加/删除模块。在我的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/

10-10 19:25