• @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
    

    其中:

    
                    
  • 相关阅读:
    谷粒学院——Day02【环境搭建和讲师管理接口开发】
    Docker安装Redis集群失败经历汇总
    网关gateway - 自定义实现动态路由信息存储记载
    Python笔记 之 闭包及装饰器
    系统性能调优:提升服务器响应速度
    什么是RPC?RPC 和 HTTP 对比?RPC有什么缺点?市面上常用的RPC框架?
    Python 异常
    Oracle19c安装后,使用impdp导数,报错 ORA-01017:
    oracle数据进程死锁查询以及解决方法
    第一章 数据可视化和matplotlib
  • 原文地址:https://blog.csdn.net/gghh2015/article/details/126942457