【问题标题】:Consul configuration on conditional property spring boot条件属性spring boot上的consul配置
【发布时间】:2018-07-02 07:21:13
【问题描述】:

如何在条件属性上写consul配置类,我已经用属性做了测试,

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

【问题讨论】:

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


    【解决方案1】:

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

    @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 的粒度上。

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

    我们的想法是定义一组与 consul 相关的属性,而不是在默认的 application.yml 文件中,而是在其他地方,例如 consul-integration.properties 文件,并使用仅在 @ConditionOnProperty 为见了。

    例子:

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

    【讨论】:

    • 这很有帮助,我知道spring boot的条件属性,我想要专门用于spring-cloud-consul,我该如何为它创建配置类
    • 哦,我现在明白了。你为什么不直接使用一个无论如何都可用的 consul 的启动器:cloud.spring.io/spring-cloud-consul 如果你需要一个条件,只需看看它的源代码,它的配置本身已经有一堆条件。所以你可能想调整你的项目来使用它们。如果你想“覆盖”它的任何 bean,你可以用你自己的配置类来做到这一点
    • 我的关注点,在 bootstrap.yml 我有,提供了所有必要的属性,但它们会在应用程序启动时加载,但我想在我拥有自己的属性(如工具)时加载它们.consul.enabled=true,那么所有属性都应该加载,否则不加载,有没有办法做到这一点
    • 嗨,我已经更新了解决您的用例的答案
    猜你喜欢
    • 2016-07-12
    • 2018-07-14
    • 1970-01-01
    • 2019-05-19
    • 2020-06-14
    • 2017-08-18
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多