条件属性Spring Boot上的Consul配置

时间:2018-07-02 07:21:13

标签: spring-boot consul spring-cloud-consul

如何在条件属性上编写 consul 配置类,我已经完成并使用属性进行了测试,

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

1 个答案:

答案 0 :(得分:2)

如果我的问题没对,您想创建一个配置类,但仅在满足某些条件时才加载此配置:

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

在这种情况下,应该使用Spring 4随附的@Conditional批注。

有许多类似@Conditional的注释,您应该只查看所需的注释。

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

如果这还不够,您甚至可以使用自己的条件逻辑。由于不是直接在问题中提出问题,因此,我仅提供一个链接({其中一个)articles,其中显示了操作方法。

例如,您可以使用

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

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

仅当启用了某个属性(您的评论中的tools.consul.enabled=true)时,此要求才运行领事配置

这个想法是要定义一组与领事相关的属性,而不是在默认的application.yml文件中,而是在其他地方(例如consul-integration.properties文件中),并使用仅在以下情况下打开的配置读取该文件: @ConditionOnProperty被满足。

示例:

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

}