• @ConditionalOnProperty注解作用


    Spring boot中的注解@ConditionalOnProperty

    Spring boot中的注解@ConditionalOnProperty,可以通过配置文件中的属性值来判定configuration是否被注入.

    配置类:
    @Configuration
    @ConditionalOnProperty(prefix = “x.y”, name = “test”, havingValue = “1”, matchIfMissing = true)
    public class XConfiguration {…}

    配置文件:
    x.y.test=1

    解释:
    prefix为配置文件中的前缀.
    name为配置的名字.
    havingValue是与配置的值对比值,当两个值相同返回true,配置类生效.
    matchIfMissing属性为true时,配置文件中缺少对应的value或name的对应的属性值,也会注入成功.

    使用场景:
    1、在日常使用中,定义一个mq的消费,在本地测试环境、预发环境、线上环境均对此定义,满足不同阶段的开发、测试、上线需要。通常接入一个新的mq消费,三个环境使用同一套mq配置,可以保障开发联调效率和上线后保证和预发环境一致。但在一个mq主题中,一个应用只能消费一次,就意味着三个环境同时运行,只能有一个环境生效,则可以使用 @ConditionalOnProperty 注解,通过配置控制。
    2、过滤器等随部署环境变动的类,使用该注解方便调试。

    @ConditionalOnProperty(
            prefix = "zn.com.interceptor",
            name = "enable",
            havingValue = "true"
    )
    

    还可以用在链式配置中,比如Spring MVC的过滤器和拦截器

    3、通过@ConditionalOnProperty来控制Configuration是否生效

    @Configuration
    //在application.properties配置"mf.assert",对应的值为true
    @ConditionalOnProperty(prefix="mf",name = "assert", havingValue = "true")
    public class AssertConfig {
        @Autowired
        private HelloServiceProperties helloServiceProperties;
        @Bean
        public HelloService helloService(){
            HelloService helloService = new HelloService();
            helloService.setMsg(helloServiceProperties.getMsg());
            return helloService;
        }
    }
    

    =====================

    @ConditionalOnProperty和@Conditional的关系

    @Conditional

    需要自己实现match方法

    @ConditionalOnProperty

    可以通过属性配置值,通过配置实现,更灵活方便,不用写代码

    附1:类似的有很多

    @Conditional(ZiDingYiCondition.class)
    @ConditionalOnProperty
    @ConditionalOnBean
    @ConditionalOnClass
    @ConditionalOnResource
    @ConditionalOnExpression
    @ConditionalOnMissingBean
    

    其中:

    
                    
  • 相关阅读:
    集合工具类的常用方法--小总和
    8. python str( )函数
    扬帆际海:shopee跨境电商客服回复流程
    做一名名企科学家,还是当终身教授,这是一个问题
    RunnerGo UI自动化测试功能使用体验
    研发效能最佳实践:持续集成应用实践丨IDCF
    使用rabbitmq进行支付之后的消息通知
    Hugging News #0331: Hugging Papers 来啦,快来认领你的论文!
    SpringMVC如何在web.xml中配置DispatcherServlet呢?
    以太坊账户私钥管理keystore 文件是什么?
  • 原文地址:https://blog.csdn.net/gghh2015/article/details/126942457