使用@SpringBootConfiguration创建Spring Boot多模块应用程序

3
我有一个Maven多模块应用程序,其结构如下:
-parent_project
-actual_project
-jpaBase

Parent project是actual_project和jpaBase(两个Spring Boot应用程序)的Maven聚合。

jpaBase是actual_project的依赖。

当我运行mvn package时,出现了一个单元测试错误:

找到多个被@SpringBootConfiguration注释的类

因为jpaBase和actual_project都有使用@SpringBootConfiguration进行注释的类。

如何确保Spring只考虑actual_project的SpringBootConfiguration类而不考虑jpaBase的呢?

谢谢!


jpaBase 是一个需要独立运行的实际应用程序,还是 actual_project 的持久化层? - The_Tourist
2个回答

5

来自Spring文档:

应用程序应该只包含一个@SpringBootConfiguration,大多数惯用的Spring Boot应用程序将从@SpringBootApplication继承它。

你说:

因为jpaBase和actual_project都有使用@SpringBootConfiguration注释的类。

不应该这样。此注释必须由应用程序使用一次。因此,只有实际项目和父项目是Spring Boot应用程序时,才应声明此注释。

@SpringBootConfiguration替换了这些注释的声明:
@Configuration@EnableAutoConfiguration@ComponentScan

您可以在官方文档中获得此信息。

因此,在您的jpaBase项目中,您可以通过声明这三个注释来替换@SpringBootConfiguration

@Configuration
@EnableAutoConfiguration
@ComponentScan({ "yourPackage" })
public class JpaConfig {
   ....
}

1
更换 jpaBase 项目的 SpringBootApplication 注释后,构建失败了,因为现在它找不到 jpaBase 的任何 SpringBootApplication 类。 但是根据您的建议,我现在通过将 parent_project pom 中的 SpringBootDependencies 从父项目部分移动到依赖管理部分中,已将 jpaBase 删除为 SpringBootApplication。现在它可以正常工作。 - Suvrajyoti Chatterjee

1
实际上,对于任何查看此内容的人来说,“SpringBootConfiguration”仅替换“@Configuration”。
“@SpringBootApplication”替换“@Configuration”,“@EnableAutoConfiguration”和“@ComponentScan”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接