是否可以覆盖@ConditionalOnProperty值?

时间:2019-11-18 14:00:19

标签: java spring spring-boot-actuator datadog

我正在自定义spring-boot-actuator-autoconfigure以满足我们公司的需求。我想为datadog配置创建单独的模块。 我希望其他应用程序如果不需要不需要management.metrics.export.datadog.enabled属性,也可以不排除任何类。

spring-boot-actuator-autoconfigure包含带有注释的配置类:

@Configuration
@AutoConfigureBefore({ CompositeMeterRegistryAutoConfiguration.class,
        SimpleMetricsExportAutoConfiguration.class })
@AutoConfigureAfter(MetricsAutoConfiguration.class)
@ConditionalOnBean(Clock.class)
@ConditionalOnClass(DatadogMeterRegistry.class)
@ConditionalOnProperty(
    prefix = "management.metrics.export.datadog", 
    name = "enabled", 
    havingValue = "true", 
    matchIfMissing = true)
@EnableConfigurationProperties(DatadogProperties.class)
public class DatadogMetricsExportAutoConfiguration {

我要在此配置中唯一更改的是matchIfMissing值。如果没有management.metrics.export.datadog.enabled属性,我希望不包含此配置。

我看到两个选择:

  1. 将其从配置中排除并创建我自己的配置
  2. 创建自己的配置,以防enabled返回实际的bean,而如果enabled = null,则返回虚拟bean,因此不会触发spring中的那个。

我不喜欢第一个,因为我正在创建自己的启动器,并且我不希望所有其他项目都排除此配置。

我更喜欢第二种选择,仅在本地/登台/测试环境中禁用指标,因此无论如何我都不会在生产中使用虚拟的,毫无意义的bean。

还有其他选择吗?

0 个答案:

没有答案