考虑为jpa存储库定义bean

问题描述 投票:1回答:2

我的项目结构如下:

的java / com.company.foo /容器/配置/

此文件夹包含

@ComponentScan({"com.company.foo.module.project",
        "com.company.foo.module.user"})
@Configuration
@EnableScheduling
@Import(value = {
        SecurityConfiguration.class})
public class ApplicationContextConfiguration {
}

我的ResourcePlannerApplication在此文件夹中:

的java / com.company.foo /容器/

并有以下注释:

@Import({ApplicationContextConfiguration.class})
@SpringBootApplication

现在我有两个模块项目和用户具有相同的结构:

的java / com.company.foo /模块/用户/ DAO /

该文件夹包含:

public interface UserRepository extends JpaRepository<UserEntity, Long> {
    UserEntity findByUsername(String username);
}

现在,当我启动应用程序时,它告诉我:

考虑在配置中定义类型为“com.company.foo.module.user.dao.UserRepository”的bean。

我没有看到问题,因为ComponentScan正在扫描所有文件夹?

spring-boot spring-data-jpa javabeans
2个回答
2
投票

组件扫描不会获取JPA存储库,因为它们只是具体类由Spring Data动态创建的接口,前提是您已在配置中包含@EnableJpaRepositories注释:

@ComponentScan({"com.company.foo.module.project",
        "com.company.foo.module.user"})
@Configuration
@EnableScheduling
@EnableJpaRepositories("com.company.foo.module.user")
@Import(value = {
        SecurityConfiguration.class})
public class ApplicationContextConfiguration {
}

0
投票

Plog的答案是正确的。我只想补充一点,类似的解决方案也适用于Mongo存储库(我们将接口作为存储库)。假设,存储库包是:

package com.example.respository;

在spring应用程序代码中启用mongo存储库,如下所示:

@EnableMongoRepositories("com.example.repsoitory")
© www.soinside.com 2019 - 2024. All rights reserved.