如何根据其他配置进行配置?

时间:2016-11-25 12:36:36

标签: spring-boot

我想让我的spring-boot配置类A依赖于另一个配置类B,即仅在评估A配置时评估B配置。 / p>

在真实环境中,我有数百个Ai配置,只有一个B,我想通过仅排除{{1}来实现排除所有Ai配置的方法在测试期间。

我尝试了以下内容:

B

@Configuration @ConditionalOnBean(type = "org.my.B") public class A1AutoConfiguration { // ... } 无条件配置类。

但是当我运行B时,我发现mvn spring-boot:run -Ddebug=true 从未评估,因为A缺失。虽然在B内创建的bean位于应用程序上下文中,但B本身不是。

我虽然可以使B配置类依赖于在 Ai内创建的 bean,但我不太喜欢这个解决方案。

是否有更清洁(和工作)的方式来实现这种依赖机制?

2 个答案:

答案 0 :(得分:4)

关键是要确保正确订购。如果您不能确保首先评估B,那么请求A仅在B存在时才有意义。

数百部分让我感到害怕。如果As和B是自动配置,则可以使用以下

@AutoconfigureAfter(B.class)
@ConditionalOnBean(B.class)
public class A123AutoConfiguration { ...}

如果As和B不是自动配置,则需要确保首先处理B,这样就不能依赖常规的类路径扫描。

答案 1 :(得分:0)

我想说这样的bean组适合于单独的库或子模块,因此它们是独立的。包含机制可以是对这种库或子模块的根包进行组件扫描。

其他选项是使用Spring配置文件。使用@Profile annotation标记您的咖啡豆并使用@ActiveProfiles to enable certain group of beans during test