【问题标题】:Spring Boot - Scan whole packages without @EntityScan/@EnableJpaRepositoriesSpring Boot - 在没有 @EntityScan/@EnableJpaRepositories 的情况下扫描整个包
【发布时间】:2018-08-02 19:15:14
【问题描述】:

下面是我的 Spring Boot 入门类。

@SpringBootApplication
@ComponentScan({"com.example"})
@EntityScan("com.example.entity")
@EnableJpaRepositories("com.example.repository")
public class SpringAppApplication {

public static void main(String[] args) {
    SpringApplication.run(SpringAppApplication.class, args);
 }
}

现在,我该如何配置@ComponentScan({"com.example.*"}) 这样我就可以避免添加@EntityScan("com.example.entity")@EnableJpaRepositories("com.example.repository")

【问题讨论】:

  • 除了@SpringBootApplication 定义之外,您不需要任何东西。 Spring Boot 将获取 bean 的存储库、实体和原型注释。您唯一应该做的就是将这个主应用程序放在根包中,这样它就可以组件扫描所有包,而无需自己定义它们。
  • Spring Boot 启动器未运行,并收到失败的抛出消息,要求定义存储库/实体。我已经添加了上述代码中的更改,并且错误消失了。应用程序运行良好。经过对根本原因的进一步研究,发现当您有不同的包用于存储实体/存储库时,需要进行上述更改。现在请继续阅读我的问题。
  • @DarrenForsythe 我明白了你在说什么,它有我上述回复和实际问题的答案!谢谢!
  • 没问题,乐于助人

标签: spring spring-mvc jpa spring-boot spring-data


【解决方案1】:

@SpringBootApplication 注释实际上是 3 个注释合二为一,其中包括 @ComponentScan(看看 here)。如果您将它放在项目的根包中(这被认为是一种很好的做法),则您不必在那里做任何事情。

@EntityScan@EnableJpaRepositories 是不同的,并且与 spring data 库相关,因此不将它们包含在 @SpringBootApplication 中确实有点道理。

因为这些注释很容易出现在数据库的配置类或类似的东西上(分离配置类有时也有好处)。

如果您愿意,您可以随时编写自己的自定义注解并继承您想要的两个(或 4 个)注解。有很多关于这个主题的在线资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多