conditionalonproperty不起作用,conditionalonproperty注解作用
目录
@ConditionalOnProperty函数及使用示例1示例2@ConditionalOnProperty使用注意事项@ConditionalOnProperty函数使用过程中遇到问题的解决方法
00-1010有时候在春季开机的时候,需要控制配置类是否生效。您可以使用@ConditionalOnProperty注释来控制@配置是否生效。
它通过它的两个属性name和havingValue来实现,其中name用于从application.properties中读取属性值
如果值为空,则返回false如果值不为空,则与havingValue指定的值进行比较,如果相同则返回true否则,返回false。如果返回值为假,则配置不生效;True才能生效。
@ConditionalOnProperty作用及用法
@ Configuration @ conditional property(prefix= filter ,name=loginFilter ,Having value= true )公共类filterconfig {//prefix是配置文件中的前缀,//name是配置的名称,//havingValue是配置值的比较值。当两个值相同时,它返回true。类生效。@ bean public filterration bean getfilterregistration(){ filterration bean filter registration=newfilterration bean(newloginfilter());filter registration . addurl patterns(/* );返回filterRegistration}}
例子1
@ Bean @ conditional property(name= spring . redis . host )redison client redison single(){ Config Config=new Config();SingleServerConfig server config=config . usesingleserver()。set address( redis :// redsionproperties . get host() : redsionproperties . get port())。settime out(redsionproperties . gettime out())。setConnectionPoolSize(redsionproperties . getconnectionpoolsize())。setConnectionMinimumIdleSize(redsionproperties . getconnectionminimumidlesize());if(string utils . isnotblank(redsionproperties . get password()){ server config . set password(redsionproperties . get password());} return redisson . create(config);}
00-1010前几天我在使用@ConditionalOnProperty注释配置多个过滤器的过程中遇到了一个问题。请在这里记录它。
先简单介绍一下@ConditionalOnProperty批注的作用,然后作者在描述自己遇到的问题时会有更好的理解。
00-1010主要通过名称和有值两个属性来控制自动配置是否生效。只有当配置文件(application.properties或bootstrap.yml)中同名属性的值与批注中havingValue的值相同时,配置文件才会生效,如下面的代码所示:
配置类
@ ConditionalonProperty(value= muyi Chen . auth . test ,having value= true) @组件公共类授权过滤器实现授权过滤器{//特定过滤逻辑}配置文件
muyichen.auth.test=true
00-1010当作者试图将此属性添加到两个以上的过滤器时,应用程序开始时会出现错误,如下所示:
******************** * * * * * * * *应用程序无法启动* * * * * * * * * * * * * * * * * * * *
描述:
com . muyi Chen . demo . config . web configuration中方法authorizationFilter的参数0需要一个bean,但找到了2个:
出现这个问题的主要原因是AuthorizationFilter是作者定义的一个过滤接口。它继承了filter接口,但尚未实现。当servlet开始识别过滤器时,由于AuthorizationFilter接口没有配置主从读取逻辑,servlet无法确定哪个过滤器配置是主要的,当几个容器的配置发生冲突时,也无法确定谁是主要的。
00-1010您可以将@Primary注释添加到主配置类,以表明它是主配置类。当其他配置类与此类冲突时,此类优先。这样就能解决以上问题。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。