1

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

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

4

1 回答 1

2

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

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

在这种情况下,您应该使用@ConditionalSpring 4 首先附带的注解。

有很多@Conditional类似的注释,你应该只看你需要的一个。

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

如果还不够,您甚至可以推出自己的条件逻辑。由于问题中没有直接询问,因此我将仅提供一个链接(众多文章之一)来说明如何做到这一点。

所以你可以去,例如:

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

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

这里的要求是仅在启用某个属性时才运行领事配置(tools.consul.enabled=true来自您的评论)

这个想法是定义一组与 consul 相关的属性,而不是在默认application.yml文件中,而是在其他地方,例如consul-integration.properties文件,并读取这个文件,配置只有在满足 a 时才会打开@ConditionOnProperty

例子:

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

}
于 2018-07-02T07:49:46.387 回答