有条件 属性 spring 启动时的 Consul 配置

Consul configuration on conditional property spring boot

如何在条件 属性 上编写 consul 配置 class,我已经完成并测试了属性,

但是想要编写配置 class 并且该配置应该按条件加载。

如果我答对了你的问题,你想创建一个配置 class 但只有在满足某些条件时才加载此配置:

@Configuration
public class MyConfiguration {
      @Bean 
      public ??? myBean() {
         ....
      }
}

在这种情况下,您应该使用 Spring 4.

中首次附带的 @Conditional 注释

有很多类似@Conditional的注释,您只需要浏览一下您需要的即可。

  • @ConditionalOnClass
  • @ConditionalOnProperty
  • @ConditionalOnMissingProperty
  • @ConditionalOnWebApplication
  • @ConditionalOnBean
  • @ConditionalOnMissingBean
  • @ConditionalOnClass
  • .....(可能还有其他的)

如果这还不够,您甚至可以推出自己的条件逻辑。由于没有直接在问题中提出,我将只提供一个 link(其中之一)articles 来说明如何做。

因此您可以使用,例如:

@Configuration
@ConditionalOnProperty(value="my.consul.integration.enabled", havingValue = "true")
public class MyConfiguration {
      @Bean 
      public ??? myBean() {
         ....
      }
} 

您还可以将条件逻辑放在单个 bean 的粒度上。

这里的要求是 运行 consul 配置只有当某个 属性 被启用时(tools.consul.enabled=true 来自你的评论)

想法是不在默认 application.yml 文件中而是在其他地方定义一组与 consul 相关的属性,例如 consul-integration.properties 文件,并使用仅打开的配置读取此文件如果满足 @ConditionOnProperty

示例:

@Configuration
@ConditionalOnProperty(value="tools.consul.enabled", havingValue=true) 
@PropertySources({
 @PropertySource("classpath:consul-integration.properties) 
})
public class ToolConsulSampleConfiguration {

}