【问题标题】:Spring boot is not identifying rest repositoriesSpring Boot 未识别其余存储库
【发布时间】:2017-05-27 21:18:51
【问题描述】:

我正在使用 spring data rest(1.3.5.RELEASE) 创建一个简单的休息服务。 但是,当我的应用程序配置位于不同的包级别时,存储库/JPA 实体不会被识别/注册。

这是我的示例项目结构:

<source.root>
 - package1
   - Application.java
 - package2
   - RepositoryService.java
   - Model.java

在这种情况下,RepositoryService 没有公开任何休息方法。

改变我的项目结构如下解决了这个问题。

<source.root>
 - package1
   - Application.java
   - package2
     - RepositoryService.java
     - Model.java

spring boot 应用程序配置是否必须存在于顶层,以便它可以扫描 bean?

【问题讨论】:

  • 不,应用程序配置不是必须在更高的包中。如果您将 Application.java 上的注释分享,我们将能够为您提供更详细的答案。

标签: java spring spring-boot spring-data spring-data-rest


【解决方案1】:

如果Application.java 是主要的Spring Boot 类,它很可能使用@SpringBootApplication 注释。

这个注解是复合注解,并且在底层还包含@ComponentScan注解。

现在组件扫描默认扫描当前包和所有子包。因此,在您的第一个项目结构中,您从组件扫描中排除了存储库。

要解决它,您有以下选择:

  1. 使用项目结构 1 并明确定义要扫描的包:@SpringBootApplication(scanBasePackages = "package2")。这不是类型安全的
  2. 使用项目结构 1 并从要扫描的包中显式定义类:@SpringBootApplication(scanBasePackageClasses = RepositoryService.class)。这比选项 1 更好,因为它是类型安全的
  3. 坚持自以为是的 Spring Boot 默认设置并使用项目结构 2。 请记住,如果您不尝试对抗其自以为是的默认设置,Spring Boot 将是您最好的朋友。只有当你有真正无与伦比的理由时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多