mow*_*ker 5 java spring spring-mvc spring-data-jpa spring-boot
我有一个 Spring Boot 父项目,我将其用作特定于客户的扩展项目的依赖项。最初,为了确保其他一切正常工作,我将客户项目的基础包设置为与父项目相同,并且一切都按预期工作。然而,一旦我将 Application 类添加到子包中,我就开始收到有关缺少 bean 和组件的异常。
例如,父项目具有基础包 com.example.parent,客户项目具有基础包 com.example.parent.customerA。起初,没有任何父 bean 被拾取,所以我添加了@ComponentScan("com.example.parent"). 然后我得到了一个关于缺少存储库 bean 的异常,所以我添加了@EnableJpaRepositories("com.example.parent"). 然后,我收到了有关缺少实体的异常,因此我添加了@EntityScan("com.example.parent"),现在它的运行方式就像客户项目与父项目具有相同的包时一样。
是否有更干净的方法来加载所有父项目的 bean 和组件?我宁愿有一种方法来配置客户项目,以便加载父项目中的所有内容,就好像客户项目具有相同的基础包一样。我担心如果我必须为 jpa 存储库和实体添加这些特定注释,我可能不会用将来可能添加的某种其他 Spring 对象来覆盖我的所有基础。
对我来说最干净的方法是让我的 spring boot 应用程序驻留在我希望被发现的所有 bean 的根目录中(也称为com.example.parent或即使com.example它适用)。所以,就你而言,我会
package com.example.parent //or com.example\n\n@SpringBootApplication\npublic class SpringBootApp {\n //main method\n}\nRun Code Online (Sandbox Code Playgroud)\n\n默认情况下,当前包和子包中的所有内容都会被选取。这是有效的,因为@SpringBootApplication已经定义了一个@ComponentScan没有参数的 ,它默认为当前包。
\n\n我们通常建议您将主应用程序类放置在根包中其他类之上。@EnableAutoConfiguration\n 注释通常放置在主类上,并且它隐式\n 为某些项定义了基 \xe2\x80\x9csearch 包\xe2\x80\x9d。例如,如果您正在编写 JPA 应用程序,则 @EnableAutoConfiguration 注解类的包将用于搜索 @Entity 项。
\n\n使用根包还允许使用 @ComponentScan 注释,而无需指定 basePackage 属性。如果您的主类位于根包中,您还可以使用 @SpringBootApplication 注释。
\n
| 归档时间: |
|
| 查看次数: |
3663 次 |
| 最近记录: |